在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 相关文章推荐
Django中URL视图函数的一些高级概念介绍
Jul 20 Python
Python字符串特性及常用字符串方法的简单笔记
Jan 04 Python
Python解析最简单的验证码
Jan 07 Python
对Python中range()函数和list的比较
Apr 19 Python
Python实现的knn算法示例
Jun 14 Python
Python3 jupyter notebook 服务器搭建过程
Nov 30 Python
Python实现图片识别加翻译功能
Dec 26 Python
如何快速理解python的垃圾回收机制
Sep 01 Python
Python程序慢的重要原因
Sep 04 Python
python统计mysql数据量变化并调用接口告警的示例代码
Sep 21 Python
python之随机数函数的实现示例
Dec 30 Python
python实现简易名片管理系统
Apr 11 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的autoload机制的实现解析
2012/09/15 PHP
laravel返回统一格式错误码问题
2019/11/04 PHP
from 表单提交返回值用post或者是get方法实现
2013/08/21 Javascript
js语法学习之判断一个对象是否为数组
2014/05/13 Javascript
Jquery弹出层插件ThickBox的使用方法
2014/12/09 Javascript
基于Javascript实现返回顶部按钮
2016/02/29 Javascript
JQuery核心函数是什么及使用方法介绍
2016/05/03 Javascript
Javascript自执行匿名函数(function() { })()的原理浅析
2016/05/15 Javascript
javascript动画之模拟拖拽效果篇
2016/09/26 Javascript
学习Node.js模块机制
2016/10/17 Javascript
Bootstrap table的使用方法
2016/11/02 Javascript
微信小程序入门教程
2016/11/18 Javascript
JavaScript中利用for循环遍历数组
2017/01/15 Javascript
vue监听滚动事件实现滚动监听
2017/04/11 Javascript
JS 调试中常见的报错问题解决方法
2017/05/20 Javascript
js 开发之autocomplete=&quot;off&quot;在chrom中失效的解决办法
2017/09/28 Javascript
Webpack4+Babel7+ES6兼容IE8的实现
2019/04/10 Javascript
解决Vue项目打包后打开index.html页面显示空白以及图片路径错误的问题
2019/10/25 Javascript
vue开发中遇到的问题总结
2020/04/07 Javascript
用python + openpyxl处理excel2007文档思路以及心得
2014/07/14 Python
python在不同层级目录import模块的方法
2016/01/31 Python
python利用socketserver实现并发套接字功能
2018/01/26 Python
Python3.5.3下配置opencv3.2.0的操作方法
2018/04/02 Python
详解Python爬取并下载《电影天堂》3千多部电影
2019/04/26 Python
JAVA及PYTHON质数计算代码对比解析
2020/06/10 Python
python json.dumps() json.dump()的区别详解
2020/07/14 Python
Python中BeautifulSoup通过查找Id获取元素信息
2020/12/07 Python
喜诗官方在线巧克力店:See’s Candies
2017/01/01 全球购物
经济管理专业自荐信
2013/12/30 职场文书
自我鉴定总结
2014/03/24 职场文书
2014年商场国庆节活动策划方案
2014/09/16 职场文书
2014年药房工作总结
2014/11/22 职场文书
出国留学单位推荐信
2015/03/26 职场文书
市场部岗位职责范本
2015/04/15 职场文书
道歉短信大全
2015/05/12 职场文书
CocosCreator ScrollView优化系列之分帧加载
2021/04/14 Python