在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-基础-入门 简介
Aug 09 Python
Python单例模式的两种实现方法
Aug 14 Python
python 地图经纬度转换、纠偏的实例代码
Aug 06 Python
Python基本socket通信控制操作示例
Jan 30 Python
浅谈Python反射 &amp; 单例模式
Mar 21 Python
python 的topk算法实例
Apr 02 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
May 21 Python
python如何调用字典的key
May 25 Python
Python基于tkinter canvas实现图片裁剪功能
Nov 05 Python
Python爬虫定时计划任务的几种常见方法(推荐)
Jan 15 Python
PyQt5 QThread倒计时功能的实现代码
Apr 02 Python
django 认证类配置实现
Nov 11 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表单递交控件名称含有点号(.)会被转化为下划线(_)的处理方法
2013/01/06 PHP
验证token、回复图文\文本、推送消息的实用微信类php代码
2016/06/28 PHP
关于JavaScript的一些看法
2009/05/27 Javascript
用 Javascript 验证表单(form)中的单选(radio)值
2009/09/08 Javascript
JavaScript高级程序设计 读书笔记之九 本地对象Array
2012/02/27 Javascript
asp.net中System.Timers.Timer的使用方法
2013/03/20 Javascript
使用jQuery.wechat构建微信WEB应用
2014/10/09 Javascript
WEB前端开发框架Bootstrap3 VS Foundation5
2016/05/16 Javascript
nodejs入门教程三:调用内部和外部方法示例
2017/04/24 NodeJs
JS实现的邮箱提示补全效果示例
2018/01/30 Javascript
Vue中使用vee-validate表单验证的方法
2018/05/09 Javascript
Mint UI组件库CheckList使用及踩坑总结
2018/12/20 Javascript
微信小程序实现的动态设置导航栏标题功能示例
2019/01/31 Javascript
vue写h5页面的方法总结
2019/02/12 Javascript
泛谈JS逻辑判断选择器 || &amp;&amp;
2019/05/24 Javascript
python文件操作之目录遍历实例分析
2015/05/20 Python
python学习之面向对象【入门初级篇】
2017/01/21 Python
Python中GIL的使用详解
2018/10/03 Python
pyqt5与matplotlib的完美结合实例
2019/06/21 Python
Python实现EXCEL表格的排序功能示例
2019/06/25 Python
django 类视图的使用方法详解
2019/07/24 Python
python 字典有序并写入json文件过程解析
2019/09/30 Python
解决Python import docx出错DLL load failed的问题
2020/02/13 Python
Python使用进程Process模块管理资源
2020/03/05 Python
通过代码实例了解Python3编程技巧
2020/10/13 Python
Django基于Models定制Admin后台实现过程解析
2020/11/11 Python
python 爬虫请求模块requests详解
2020/12/04 Python
Bose英国官方网站:美国知名音响品牌
2020/01/26 全球购物
开办大学饮食联盟创业计划书
2014/01/29 职场文书
测量工程专业求职信
2014/02/24 职场文书
党员公开承诺书范文
2014/03/25 职场文书
师德师风整改措施
2014/10/24 职场文书
3.15消费者权益日活动总结
2015/02/09 职场文书
学校捐书倡议书
2015/04/27 职场文书
幼儿园老师工作总结2015
2015/05/22 职场文书
解决Tkinter中button按钮未按却主动执行command函数的问题
2021/05/23 Python