在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中死锁的形成示例及死锁情况的防止
Jun 14 Python
关于Python中浮点数精度处理的技巧总结
Aug 10 Python
Python应用库大全总结
May 30 Python
对TensorFlow中的variables_to_restore函数详解
Jul 30 Python
使用Python制作表情包实现换脸功能
Jul 19 Python
Python实现决策树并且使用Graphviz可视化的例子
Aug 09 Python
解决Django删除migrations文件夹中的文件后出现的异常问题
Aug 31 Python
python matplotlib 画dataframe的时间序列图实例
Nov 20 Python
Python实现把多维数组展开成DataFrame
Nov 30 Python
Pytorch中.new()的作用详解
Feb 18 Python
python学习将数据写入文件并保存方法
Jun 07 Python
python模拟点击玩游戏的实例讲解
Nov 26 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学习笔记之一
2011/01/17 PHP
php中取得文件的后缀名?
2012/02/20 PHP
深入php数据采集的详解
2013/06/02 PHP
php使用cookie保存登录用户名的方法
2015/01/26 PHP
PHP开启opcache提升代码性能
2015/04/26 PHP
PHP自定义错误用法示例
2016/09/28 PHP
php中目录操作opendir()、readdir()及scandir()用法示例
2019/06/08 PHP
Yii 框架使用数据库(databases)的方法示例
2020/05/19 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
2020/08/26 PHP
基于jQuery的倒计时插件代码
2011/05/07 Javascript
JQuery实现表格中相同单元格合并示例代码
2013/06/26 Javascript
常用的几段javascript代码分享
2014/03/25 Javascript
JavaScript构造函数详解
2015/12/27 Javascript
JS数组操作(数组增加、删除、翻转、转字符串、取索引、截取(切片)slice、剪接splice、数组合并)
2016/05/20 Javascript
JS判断浏览器是否安装flash插件的简单方法
2016/09/13 Javascript
angularJs中$scope数据序列化的实例
2018/09/30 Javascript
微信小程序如何获取用户收货地址
2018/11/27 Javascript
JavaScript实现美化滑块效果
2019/05/17 Javascript
解决vue-cli项目开发运行时内存暴涨卡死电脑问题
2019/10/29 Javascript
ES6扩展运算符和rest运算符用法实例分析
2020/05/23 Javascript
jQuery实现二级导航菜单的示例
2020/09/30 jQuery
微信小程序实现音乐播放页面布局
2020/12/11 Javascript
原生js实现放大镜组件
2021/01/22 Javascript
[33:39]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第二局
2016/02/27 DOTA
对变量赋值的理解--Pyton中让两个值互换的实现方法
2017/11/29 Python
Python selenium抓取虎牙短视频代码实例
2020/03/02 Python
scrapy利用selenium爬取豆瓣阅读的全步骤
2020/09/20 Python
微信小程序“圣诞帽”的实现思路详解
2017/12/28 HTML / CSS
韩国CJ食品专卖网:CJonmart
2016/09/11 全球购物
个人找工作求职简历的自我评价
2013/10/20 职场文书
委托书样本
2014/04/02 职场文书
学生请假条
2014/04/11 职场文书
先进人物事迹材料
2014/12/29 职场文书
nginx 防盗链防爬虫配置详解
2021/03/31 Servers
7个你应该知道的JS原生错误类型
2021/04/29 Javascript
MongoDB balancer的使用详解
2021/04/30 MongoDB