在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基础教程之获取本机ip数据包示例
Feb 10 Python
利用Python开发微信支付的注意事项
Aug 19 Python
利用python画出折线图
Jul 26 Python
python实现windows壁纸定期更换功能
Jan 21 Python
Python学习笔记之读取文件、OS模块、异常处理、with as语法示例
Jun 04 Python
Django 开发环境配置过程详解
Jul 18 Python
python socket通信编程实现文件上传代码实例
Dec 14 Python
PageFactory设计模式基于python实现
Apr 14 Python
Keras SGD 随机梯度下降优化器参数设置方式
Jun 19 Python
基于Pytorch版yolov5的滑块验证码破解思路详解
Feb 25 Python
教你利用Selenium+python自动化来解决pip使用异常
May 20 Python
Python读写yaml文件
Mar 20 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 日志缩略名的创建函数代码
2010/05/26 PHP
php下正则来匹配dede模板标签的代码
2010/08/21 PHP
PHP创建桌面快捷方式的实例代码
2014/02/17 PHP
PHP文件上传处理案例分析
2016/10/15 PHP
php PDO异常处理详解
2016/11/20 PHP
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
php生成word并下载代码实例
2019/03/15 PHP
JavaScript 事件属性绑定带参数的函数
2009/03/13 Javascript
javascript concat数组累加 示例
2009/09/03 Javascript
extjs 学习笔记 四 带分页的grid
2009/10/20 Javascript
jMessageBox 基于jQuery的窗口插件
2009/12/09 Javascript
json数据与字符串的相互转化示例
2013/09/18 Javascript
如何获取select下拉框的值(option没有及有value属性)
2013/11/08 Javascript
javascript几个易错点记录
2014/11/26 Javascript
简述JavaScript中正则表达式的使用方法
2015/06/15 Javascript
jquery实现滑屏大图定时收缩为小banner图片的广告代码
2015/09/02 Javascript
JavaScript判断DIV内容是否为空的方法
2016/01/29 Javascript
JS判断日期格式是否合法的简单实例
2016/07/11 Javascript
Bootstrap popover 实现鼠标移入移除显示隐藏功能方法
2018/01/24 Javascript
Vue2.0 实现移动端图片上传功能
2018/05/30 Javascript
vue中的 $slot 获取插槽的节点实例
2019/11/12 Javascript
d3.js实现图形拖拽
2019/12/19 Javascript
如何利用 JS 脚本实现网页全自动秒杀抢购功能
2020/10/12 Javascript
[00:43]拉比克至宝魔导师密钥展示
2018/12/20 DOTA
Android 兼容性问题:java.lang.UnsupportedOperationException解决办法
2017/03/19 Python
PyQt5实现下载进度条效果
2018/04/19 Python
用python画一只可爱的皮卡丘实例
2019/11/21 Python
解决Python二维数组赋值问题
2019/11/28 Python
Python模拟登录和登录跳转的参考示例
2020/10/30 Python
德国拖鞋网站:German Slippers
2019/11/08 全球购物
澳大利亚家居用品零售商:Harris Scarfe
2020/10/10 全球购物
Lucene推荐的分页方式是什么?
2015/12/07 面试题
社区工作者思想汇报
2014/01/13 职场文书
英语教师求职信范文
2015/03/20 职场文书
被告代理词范文
2015/05/25 职场文书
2016优秀护士求职自荐信
2016/01/28 职场文书