在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设置tmpfs来加速项目的教程
Apr 17 Python
使用Python脚本来获取Cisco设备信息的示例
May 04 Python
python分析网页上所有超链接的方法
May 08 Python
Python实现简易端口扫描器代码实例
Mar 15 Python
PyChar学习教程之自定义文件与代码模板详解
Jul 17 Python
对pandas replace函数的使用方法小结
May 18 Python
python matplotlib 在指定的两个点之间连线方法
May 25 Python
numpy concatenate数组拼接方法示例介绍
May 27 Python
浅谈JupyterNotebook导出pdf解决中文的问题
Apr 22 Python
使用npy转image图像并保存的实例
Jul 01 Python
Python request中文乱码问题解决方案
Sep 17 Python
Python基于execjs运行js过程解析
Nov 27 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中判断变量为空的几种方法分享
2013/08/26 PHP
关于php支持分块与断点续传文件下载功能代码
2014/05/09 PHP
thinkphp普通查询与表达式查询实例分析
2014/11/24 PHP
通过Unicode转义序列来加密,按你说的可以算是混淆吧
2007/05/06 Javascript
JQuery扩展插件Validate 3通过参数设置错误信息
2011/09/05 Javascript
CSS鼠标响应事件经过、移动、点击示例介绍
2013/09/04 Javascript
简介JavaScript中getUTCMonth()方法的使用
2015/06/10 Javascript
提高jQuery性能优化的技巧
2015/08/03 Javascript
jQuery实现图片轮播效果代码
2016/09/27 Javascript
jQuery插件zTree实现单独选中根节点中第一个节点示例
2017/03/08 Javascript
关于在vue-cli中使用微信自动登录和分享的实例
2017/06/22 Javascript
JS 实现百度搜索功能
2018/02/01 Javascript
jQuery length 和 size()区别总结
2018/04/26 jQuery
详解React中setState回调函数
2018/06/14 Javascript
前后端如何实现登录token拦截校验详解
2018/09/03 Javascript
Vue文件配置全局变量的实例
2018/09/06 Javascript
vue环形进度条组件实例应用
2018/10/10 Javascript
基于node.js实现爬虫的讲解
2019/02/18 Javascript
30分钟用Node.js构建一个API服务器的步骤详解
2019/05/24 Javascript
vue集成kindeditor富文本的实现示例代码
2019/06/07 Javascript
送你43道JS面试题(收藏)
2019/06/17 Javascript
如何使用JavaScript实现无缝滚动自动播放轮播图效果
2020/08/20 Javascript
Python3 单行多行万能正则匹配方法
2019/01/07 Python
Python 实现文件读写、坐标寻址、查找替换功能
2019/09/11 Python
利用Python实现Excel的文件间的数据匹配功能
2020/06/16 Python
细说CSS3中box属性中的overflow-x属性和overflow-y属性值的效果
2014/07/21 HTML / CSS
html5 Canvas画图教程(7)—canvas里画曲线之quadraticCurveTo方法
2013/01/09 HTML / CSS
JAKO-O德国野酷台湾站:德国首屈一指的婴幼童用品品牌
2019/01/14 全球购物
化学教师自荐信范文
2013/12/28 职场文书
个人自我评价和职业目标
2014/01/24 职场文书
小班秋游活动方案
2014/02/22 职场文书
巾帼文明岗事迹材料
2014/12/24 职场文书
担保书范文
2015/01/20 职场文书
2015年社区妇联工作总结
2015/04/21 职场文书
初中毕业生感言
2015/07/31 职场文书
小学体育跳绳课教学反思
2016/02/16 职场文书