在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函数的参数的默认值所引发的问题的原因
Mar 30 Python
python爬虫框架talonspider简单介绍
Jun 09 Python
Python 将RGB图像转换为Pytho灰度图像的实例
Nov 14 Python
快速了解python leveldb
Jan 18 Python
Python中分支语句与循环语句实例详解
Sep 13 Python
浅谈python在提示符下使用open打开文件失败的原因及解决方法
Nov 30 Python
Python 限制线程的最大数量的方法(Semaphore)
Feb 22 Python
Python中typing模块与类型注解的使用方法
Aug 05 Python
opencv 图像礼帽和图像黑帽的实现
Jul 07 Python
Python对excel的基本操作方法
Feb 18 Python
python使用PySimpleGUI设置进度条及控件使用
Jun 10 Python
python 使用pandas读取csv文件的方法
Dec 24 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
一个简单的MySQL数据浏览器
2006/10/09 PHP
PHP开发中常用的8个小技巧
2008/08/27 PHP
比较完整的微信开发php代码
2016/08/02 PHP
php实现的简单中文验证码功能示例
2017/01/03 PHP
laravel框架实现为 Blade 模板引擎添加新文件扩展名操作示例
2020/01/25 PHP
Javascript中暂停功能的实现代码
2007/03/04 Javascript
Javascript学习笔记9 prototype封装继承
2010/01/11 Javascript
jQuery获取样式中的背景颜色属性值/颜色值
2012/12/17 Javascript
屏蔽script注入小例子
2013/11/12 Javascript
JavaScript 获取任一float型小数点后两位的小数
2014/06/30 Javascript
jquery 构造函数在表单提交过程中修改数据
2015/05/25 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
2015/07/02 Javascript
AngularJS实现分页显示数据库信息
2016/07/01 Javascript
bootstrap table方法之expandRow-collapseRow展开或关闭当前行数据
2020/08/09 Javascript
基于node下的http小爬虫的示例代码
2018/01/11 Javascript
vue用递归组件写树形控件的实例代码
2018/07/19 Javascript
Laravel admin实现消息提醒、播放音频功能
2019/07/10 Javascript
js实现AI五子棋人机大战
2020/05/28 Javascript
jQuery实现验证用户登录
2019/12/10 jQuery
JavaScript实现捕获鼠标坐标
2020/04/12 Javascript
基于openlayers实现角度测量功能
2020/09/28 Javascript
Python开发常用的一些开源Package分享
2015/02/14 Python
python入门教程 python入门神图一张
2018/03/05 Python
python脚本调用iftop 统计业务应用流量的思路详解
2019/10/11 Python
通过实例解析python描述符原理作用
2020/01/22 Python
有关Tensorflow梯度下降常用的优化方法分享
2020/02/04 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
2020/02/27 Python
基于python生成英文版词云图代码实例
2020/05/16 Python
如何教少儿学习Python编程
2020/07/10 Python
size?丹麦官网:英国伦敦的球鞋精品店
2019/04/15 全球购物
静心口服夜广告词
2014/03/20 职场文书
保护环境倡议书300字
2014/05/19 职场文书
2016年大学生党员承诺书
2016/03/24 职场文书
创业计划书之青年旅馆
2019/09/23 职场文书
八年级作文之我的母亲
2019/12/10 职场文书
python 利用PyAutoGUI快速构建自动化操作脚本
2021/05/31 Python