在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 27 Python
Python实现统计英文单词个数及字符串分割代码
May 28 Python
浅谈Python中chr、unichr、ord字符函数之间的对比
Jun 16 Python
教大家玩转Python字符串处理的七种技巧
Mar 31 Python
Python爬取个人微信朋友信息操作示例
Aug 03 Python
numpy.random模块用法总结
May 27 Python
Python文件操作中进行字符串替换的方法(保存到新文件/当前文件)
Jun 28 Python
Python3中urlencode和urldecode的用法详解
Jul 23 Python
python实现的按要求生成手机号功能示例
Oct 08 Python
Pytorch中实现只导入部分模型参数的方式
Jan 02 Python
使用Python3 poplib模块删除服务器多天前的邮件实现代码
Apr 24 Python
Python实现GIF图倒放
Jul 16 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定时更新程序设计思路分享
2014/06/10 PHP
JavaScript浏览器选项卡效果
2010/08/25 Javascript
让浏览器非阻塞加载javascript的几种方法小结
2011/04/25 Javascript
jquery中ajax学习笔记3
2011/10/16 Javascript
下拉列表select 由左边框移动到右边示例
2013/12/04 Javascript
js实现div的切换特效上一个下一个
2014/02/11 Javascript
javasctipt如何显示几分钟前、几天前等
2014/04/30 Javascript
js交换排序 冒泡排序算法(Javascript版)
2014/10/04 Javascript
DOM节点的替换或修改函数replaceChild()用法实例
2015/01/12 Javascript
封装了jQuery的Ajax请求全局配置
2015/02/05 Javascript
JavaScript组合模式学习要点
2016/08/26 Javascript
vue2.0s中eventBus实现兄弟组件通信的示例代码
2017/10/25 Javascript
如何选择适合你的JavaScript框架
2017/11/20 Javascript
javascript字体颜色控件的开发 JS实现字体控制
2017/11/27 Javascript
js 实现复选框只能选择一项的示例代码
2018/01/23 Javascript
Vue-cropper 图片裁剪的基本原理及思路讲解
2018/04/17 Javascript
解决Mac下安装nmp的淘宝镜像失败问题
2018/05/16 Javascript
监控Nodejs的性能实例代码
2019/07/02 NodeJs
使用layui定义一个模块并使用的例子
2019/09/14 Javascript
不刷新网页就能链接新的js文件方法总结
2020/03/01 Javascript
[01:59]翻天覆地,因你而变,7.20版本地图更新速览
2018/11/24 DOTA
[43:32]Winstrike vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
python实现web方式logview的方法
2015/08/10 Python
python pygame实现方向键控制小球
2019/05/17 Python
安装Pycharm2019以及配置anconda教程的方法步骤
2019/11/11 Python
django实现后台显示媒体文件
2020/04/07 Python
python二维图制作的实例代码
2020/12/03 Python
带你认识HTML5中的WebSocket
2015/05/22 HTML / CSS
美国饼干礼物和美食甜点购买网站:Cheryl’s
2020/05/28 全球购物
新颖的化妆品活动方案
2014/08/21 职场文书
党的群众路线教育实践活动对照检查材料(教师)
2014/09/24 职场文书
小学教师2014年度工作总结
2014/12/03 职场文书
关于空气污染危害的感想
2015/08/11 职场文书
MySQL系列之九 mysql查询缓存及索引
2021/07/02 MySQL
Python超详细分步解析随机漫步
2022/03/17 Python
python小型的音频操作库mp3Play
2022/04/24 Python