在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 相关文章推荐
windows系统中python使用rar命令压缩多个文件夹示例
May 06 Python
Python实现的数据结构与算法之基本搜索详解
Apr 22 Python
详解Python Socket网络编程
Jan 05 Python
Python 爬虫图片简单实现
Jun 01 Python
python3解析库pyquery的深入讲解
Jun 26 Python
Python实现曲线拟合操作示例【基于numpy,scipy,matplotlib库】
Jul 12 Python
Python中psutil的介绍与用法
May 02 Python
python RC4加密操作示例【测试可用】
Sep 26 Python
python3获取文件中url内容并下载代码实例
Dec 27 Python
使用keras和tensorflow保存为可部署的pb格式
May 25 Python
Python调用百度OCR实现图片文字识别的示例代码
Jul 17 Python
如何用 Python 处理不平衡数据集
Jan 04 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第一季视频教程(李炎恢+php100 不断更新)
2011/05/29 PHP
PHP版本升级到7.x后wordpress的一些修改及wordpress技巧
2015/12/25 PHP
CI框架常用方法小结
2016/05/17 PHP
通过php动态传数据到highcharts
2017/04/05 PHP
PHP Socket网络操作类定义与用法示例
2017/08/30 PHP
win7 wamp 64位 php环境开启curl服务遇到的问题及解决方法
2018/09/16 PHP
什么是PHP7中的孤儿进程与僵尸进程
2019/04/14 PHP
PHP网站常见安全漏洞,及相应防范措施总结
2021/03/01 PHP
CSDN轮换广告图片轮换效果
2007/03/27 Javascript
JavaScript 函数调用规则
2009/09/14 Javascript
如何让浏览器支持jquery ajax load 前进、后退功能
2014/06/12 Javascript
node.js中的console.log方法使用说明
2014/12/09 Javascript
JS+CSS实现弹出全屏灰黑色透明遮罩效果的方法
2014/12/20 Javascript
jquery衣服颜色选取插件效果代码分享
2015/08/28 Javascript
js密码强度实时检测代码
2016/03/02 Javascript
通过jquery-ui中的sortable来实现拖拽排序的简单实例
2016/05/24 Javascript
JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
2017/10/25 Javascript
JQuery获取可视区尺寸和文档尺寸及制作悬浮菜单示例
2019/05/14 jQuery
javascript设计模式 ? 组合模式原理与应用实例分析
2020/04/14 Javascript
JavaScript实现猜数字游戏
2020/05/20 Javascript
vue项目配置同一局域网可使用ip访问的操作
2020/10/23 Javascript
python中urlparse模块介绍与使用示例
2017/11/19 Python
python mac下安装虚拟环境的图文教程
2019/04/12 Python
Python实现操纵控制windows注册表的方法分析
2019/05/24 Python
python银行系统实现源码
2019/10/25 Python
200行python代码实现贪吃蛇游戏
2020/04/24 Python
CSS3中的Transition过度与Animation动画属性使用要点
2016/05/20 HTML / CSS
详解CSS3 rem(设置字体大小) 教程
2017/11/21 HTML / CSS
video实现有声音自动播放的实现方法
2020/05/20 HTML / CSS
神路信息Java面试题目
2013/03/31 面试题
大学生村官任职感言
2014/01/09 职场文书
办理退休介绍信
2014/01/09 职场文书
就业推荐表自我鉴定范文
2014/03/21 职场文书
学生无故旷课检讨书
2014/09/20 职场文书
群众路线班子对照检查材料
2014/09/25 职场文书
领导干部四风问题自我剖析材料
2014/09/25 职场文书