在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之用while来循环
Oct 02 Python
Python操作CouchDB数据库简单示例
Mar 10 Python
Python实现SMTP发送邮件详细教程
Mar 02 Python
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
Oct 01 Python
python中logging库的使用总结
Oct 18 Python
用xpath获取指定标签下的所有text的实例
Jan 02 Python
python实现QQ空间自动点赞功能
Apr 09 Python
OpenCV 边缘检测
Jul 10 Python
python re.sub()替换正则的匹配内容方法
Jul 22 Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
Aug 06 Python
Win 10下Anaconda虚拟环境的教程
May 18 Python
python实现模拟器爬取抖音评论数据的示例代码
Jan 06 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中curl_setopt函数用法实例分析
2015/04/16 PHP
php微信浏览器分享设置以及回调详解
2016/08/01 PHP
表单内同名元素的控制
2006/11/22 Javascript
Javascript 日期处理之时区问题
2009/10/08 Javascript
jquery live()重复绑定的解决方法介绍
2014/01/03 Javascript
jquery为页面增加快捷键示例
2014/01/31 Javascript
纯js实现遮罩层效果原理分析
2014/05/27 Javascript
一款由jquery实现的整屏切换特效
2014/09/15 Javascript
js实现浮动在网页右侧的简洁QQ在线客服代码
2015/09/04 Javascript
解决jquery中动态新增的元素节点无法触发事件问题的两种方法
2015/10/30 Javascript
浅析$.getJSON异步请求和同步请求
2016/06/06 Javascript
详解RequireJS按需加载样式文件
2017/04/12 Javascript
vue.js默认路由不加载linkActiveClass问题的解决方法
2017/12/11 Javascript
JS实现监控微信小程序的原理
2018/06/15 Javascript
Vue filter 过滤当前时间 实现实时更新效果
2019/12/20 Javascript
解决Echarts2竖直datazoom滑动后显示数据不全的问题
2020/07/20 Javascript
微信小程序向Java后台传输参数的方法实现
2020/12/10 Javascript
[01:11:02]Secret vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python基于回溯法子集树模板解决0-1背包问题实例
2017/09/02 Python
Python网络编程之TCP套接字简单用法示例
2018/04/09 Python
Django中日期处理注意事项与自定义时间格式转换详解
2018/08/06 Python
在Pycharm中对代码进行注释和缩进的方法详解
2019/01/20 Python
关于PyTorch源码解读之torchvision.models
2019/08/17 Python
如何在python中执行另一个py文件
2020/04/30 Python
python使用matplotlib:subplot绘制多个子图的示例
2020/09/24 Python
草莓网化妆品日本站:Strawberrynet日本
2017/10/20 全球购物
洛杉矶生活休闲而精致的基础品牌:Mika Jaymes
2018/01/07 全球购物
俄罗斯卫浴采暖及维修用品超级市场:Dkrussia
2020/05/12 全球购物
办公室文秘岗位职责
2013/11/15 职场文书
自我鉴定怎么写
2013/12/05 职场文书
社区母亲节活动记录
2014/03/06 职场文书
竞争上岗演讲稿范文
2014/05/12 职场文书
关于运动会的广播稿
2014/09/22 职场文书
安全生产工作汇报材料
2014/10/28 职场文书
迎新生晚会主持词
2015/06/30 职场文书
详解OpenCV获取高动态范围(HDR)成像
2022/04/29 Python