在Python中执行系统命令的方法示例详解


Posted in Python onSeptember 14, 2017

前言

Python经常被称作“胶水语言”,因为它能够轻易地操作其他程序,轻易地包装使用其他语言编写的库。在Python/wxPython环境下,执行外部命令或者说在Python程序中启动另一个程序的方法。

本文将详细介绍关于Python中如何执行系统命令的相关资料,下面话不多说了,来一起看看详细的介绍吧。

(1) os.system()

这个方法直接调用标准C的system()函数,仅仅在一个子终端运行系统命令,而不能获取执行返回的信息。

>>> import os 
>>> output = os.system('cat /proc/cpuinfo') 
processor : 0 
vendor_id : AuthenticAMD 
cpu family : 21 
... ... 
>>> output # doesn't capture output 
0

(2) os.popen()

这个方法执行命令并返回执行后的信息对象,是通过一个管道文件将结果返回。

>>> output = os.popen('cat /proc/cpuinfo') 
>>> output 
<open file 'cat /proc/cpuinfo', mode 'r' at 0x7ff52d831540> 
>>> print output.read() 
processor : 0 
vendor_id : AuthenticAMD 
cpu family : 21 
... ... 
>>><span style="font-size:14px;">

(3) commands模块

>>> import commands 
>>> (status, output) = commands.getstatusoutput('cat /proc/cpuinfo') 
>>> print output 
processor : 0 
vendor_id : AuthenticAMD 
cpu family : 21 
... ... 
>>> print status 
0

注意1:在类unix的系统下使用此方法返回的返回值(status)与脚本或命令执行之后的返回值不等,这是因为调用了os.wait()的缘故,具体原因就得去了解下系统wait()的实现了。需要正确的返回值(status),只需要对返回值进行右移8位操作就可以了。

注意2:当执行命令的参数或者返回中包含了中文文字,那么建议使用subprocess。

(4) subprocess模块

该模块是一个功能强大的子进程管理模块,是替换os.system, os.spawn*等方法的一个模块。

>>> import subprocess 
>>> subprocess.Popen(["ls", "-l"]) <strong> # python2.x</strong> doesn't capture output 
>>> subprocess.run(["ls", "-l"]) <strong># python3.x</strong> doesn't capture output 
<subprocess.Popen object at 0x7ff52d7ee490> 
>>> total 68 
drwxrwxr-x 3 xl xl 4096 Feb 8 05:00 com 
drwxr-xr-x 2 xl xl 4096 Jan 21 02:58 Desktop 
drwxr-xr-x 2 xl xl 4096 Jan 21 02:58 Documents 
drwxr-xr-x 2 xl xl 4096 Jan 21 07:44 Downloads 
... ... 
>>>

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

补充:

最近在做那个测试框架的时候发现 Python 的另一个获得系统执行命令的返回值和输出的类。

最开始的时候用 Python 学会了 os.system() 这个方法是很多比如 C,Perl 相似的。

os.system('cat /proc/cpuinfo')

但是这样是无法获得到输出和返回值的,继续 Google,之后学会了 os.popen()。

output = os.popen('cat /proc/cpuinfo')
print output.read()

通过 os.popen() 返回的是 file read 的对象,对其进行读取 read() 的操作可以看到执行的输出。但是怎么读取程序执行的返回值呢,当然咯继续请教伟大的 Google(联想到像我这样的人工作如果离开了 Google,不是成了废物。。。Baidu 忽视)。Google 给我指向了 commands — Utilities for running commands。
这样通过 commands.getstatusoutput() 一个方法就可以获得到返回值和输出,非常好用。

(status, output) = commands.getstatusoutput('cat /proc/cpuinfo')
print status, output

Python Document 中给的一个例子,很清楚的给出了各方法的返回。

>>> import commands
>>> commands.getstatusoutput('ls /bin/ls')
(0, '/bin/ls')
>>> commands.getstatusoutput('cat /bin/junk')
(256, 'cat: /bin/junk: No such file or directory')
>>> commands.getstatusoutput('/bin/junk')
(256, 'sh: /bin/junk: not found')
>>> commands.getoutput('ls /bin/ls')
'/bin/ls'
>>> commands.getstatus('/bin/ls')
'-rwxr-xr-x 1 root 13352 Oct 14 1994 /bin/ls'

Python 相关文章推荐
Python引用模块和查找模块路径
Mar 17 Python
python实现泊松图像融合
Jul 26 Python
python运行时强制刷新缓冲区的方法
Jan 14 Python
为什么你还不懂得怎么使用Python协程
May 13 Python
django 环境变量配置过程详解
Aug 06 Python
Python制作词云图代码实例
Sep 09 Python
pytorch 自定义卷积核进行卷积操作方式
Dec 30 Python
python3实现往mysql中插入datetime类型的数据
Mar 02 Python
django 外键创建注意事项说明
May 20 Python
python 最简单的实现适配器设计模式的示例
Jun 30 Python
python 调用js的四种方式
Apr 11 Python
Django分页器的用法你都了解吗
May 26 Python
关于Python如何避免循环导入问题详解
Sep 14 #Python
Python实现随机选择元素功能
Sep 14 #Python
python自动化脚本安装指定版本python环境详解
Sep 14 #Python
python实现八大排序算法(2)
Sep 14 #Python
Python3.4编程实现简单抓取爬虫功能示例
Sep 14 #Python
python实现八大排序算法(1)
Sep 14 #Python
python实现简单聊天应用 python群聊和点对点均实现
Sep 14 #Python
You might like
php读取txt文件组成SQL并插入数据库的代码(原创自Zjmainstay)
2012/07/31 PHP
PHP实现手机号码中间四位用星号(*)隐藏的自定义函数分享
2014/09/27 PHP
PHP实现图片压缩
2020/09/09 PHP
php中访问修饰符的知识点总结
2019/01/27 PHP
一个选择最快的服务器转向代码
2009/04/27 Javascript
JavaScript高级程序设计 阅读笔记(十八) js跨平台的事件
2012/08/14 Javascript
JS分页效果示例
2013/10/11 Javascript
node.js中watch机制详解
2014/11/17 Javascript
jquery图片切换插件
2015/03/16 Javascript
60行js代码实现俄罗斯方块
2015/03/31 Javascript
轻量级javascript 框架Backbone使用指南
2015/07/24 Javascript
jQuery解析json格式数据简单实例
2016/01/22 Javascript
AngularJS基础 ng-show 指令简单示例
2016/08/03 Javascript
js style.display=block显示布局错乱问题的解决方法
2016/09/21 Javascript
vue如何获取点击事件源的方法
2017/08/10 Javascript
vue-cli项目根据线上环境分别打出测试包和生产包
2018/05/23 Javascript
nodejs中函数的调用实例详解
2018/10/31 NodeJs
Vue.js实现的购物车功能详解
2019/01/27 Javascript
使用 webpack 插件自动生成 vue 路由文件的方法
2019/08/20 Javascript
[01:19]DOTA2城市挑战赛报名开始 开启你的城市传奇
2018/03/23 DOTA
selenium使用chrome浏览器测试(附chromedriver与chrome的对应关系表)
2018/11/29 Python
浅谈python中真正关闭socket的方法
2018/12/18 Python
基于wxPython的GUI实现输入对话框(1)
2019/02/27 Python
python已协程方式处理任务实现过程
2019/12/27 Python
python调用百度AI接口实现人流量统计
2021/02/03 Python
html5小程序飞入购物车(抛物线绘制运动轨迹点)
2020/10/19 HTML / CSS
美国隐形眼镜销售网站:ContactsDirect
2017/10/28 全球购物
澳大利亚当地最大的时装生产商:Cue
2018/08/06 全球购物
泰国国际航空公司官网:Thai Airways International
2019/12/04 全球购物
法国隐形眼镜网站:VisionDirect.fr
2020/03/03 全球购物
经济与贸易专业应届生求职信
2013/11/19 职场文书
土木工程专业个人求职信
2013/12/30 职场文书
硕士研究生求职自荐信范文
2014/03/11 职场文书
招标保密承诺书
2015/01/20 职场文书
大学毕业生个人总结
2015/02/28 职场文书
mybatis使用oracle进行添加数据的方法
2021/04/27 Oracle