在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多进程通信Queue、Pipe、Value、Array实例
Nov 21 Python
Python中join和split用法实例
Apr 14 Python
Python内置模块hashlib、hmac与uuid用法分析
Feb 12 Python
python+selenium打印当前页面的titl和url方法
Jun 22 Python
Python实现的简单线性回归算法实例分析
Dec 26 Python
Django Form 实时从数据库中获取数据的操作方法
Jul 25 Python
python中调试或排错的五种方法示例
Sep 12 Python
Python手绘可视化工具cutecharts使用实例
Dec 05 Python
解决django 向mysql中写入中文字符出错的问题
May 18 Python
如何完美的建立一个python项目
Oct 09 Python
用python读取xlsx文件
Dec 17 Python
浅谈盘点5种基于Python生成的个性化语音方法
Feb 05 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中memcache的应用
2013/06/18 PHP
ThinkPHP3.1查询语言详解
2014/06/19 PHP
PHP+Mysql+jQuery查询和列表框选择操作实例讲解
2015/10/22 PHP
php操作路径的经典方法(必看篇)
2016/10/04 PHP
JavaScript 新手24条实用建议[TUTS+]
2009/06/21 Javascript
js replace正则表达式应用案例讲解
2013/01/17 Javascript
flash+jQuery实现可关闭及重复播放的压顶广告
2015/04/15 Javascript
jQuery实现图片左右滚动特效
2020/04/20 Javascript
详解js私有作用域中创建特权方法
2016/01/25 Javascript
第五篇Bootstrap 排版
2016/06/21 Javascript
全面了解JavaScript的数据类型转换
2016/07/01 Javascript
利用n工具轻松管理Node.js的版本
2017/04/21 Javascript
js实现鼠标跟随运动效果
2020/08/02 Javascript
安装Node.js并启动本地服务的操作教程
2018/05/12 Javascript
浅谈手写node可读流之流动模式
2018/06/01 Javascript
原生js实现移动端Touch轮播图的方法步骤
2019/01/03 Javascript
js作用域和作用域链及预解析
2019/04/11 Javascript
微信小程序bindtap事件与冒泡阻止详解
2019/08/08 Javascript
Postman动态获取返回值过程详解
2020/06/30 Javascript
Vue 组件复用多次自定义参数操作
2020/07/27 Javascript
[49:02]KG vs Infamous 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
[01:46]2020完美世界全国高校联赛秋季赛报名开启
2020/10/15 DOTA
在Python的Flask框架下收发电子邮件的教程
2015/04/21 Python
简单的python后台管理程序
2017/04/13 Python
Python使用pandas处理CSV文件的实例讲解
2018/06/22 Python
总结Python图形用户界面和游戏开发知识点
2019/05/22 Python
python3.6 tkinter实现屏保小程序
2019/07/30 Python
Python rabbitMQ如何实现生产消费者模式
2020/08/24 Python
canvas 如何绘制线段的实现方法
2018/07/12 HTML / CSS
丹尼尔惠灵顿手表天猫官方旗舰店:Daniel Wellington
2017/08/25 全球购物
罗技英国官方网站:Logitech UK
2020/11/03 全球购物
空指针到底是什么
2012/08/07 面试题
2015年幼儿园毕业感言
2014/02/12 职场文书
广告词串烧
2014/03/19 职场文书
2014年幼儿园后勤工作总结
2014/11/10 职场文书
公司环境卫生管理制度
2015/08/05 职场文书