在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实现Const详解
Jan 27 Python
使用Python的Bottle框架写一个简单的服务接口的示例
Aug 25 Python
python+opencv实现的简单人脸识别代码示例
Nov 14 Python
详谈套接字中SO_REUSEPORT和SO_REUSEADDR的区别
Apr 28 Python
用python标准库difflib比较两份文件的异同详解
Nov 16 Python
python实现一个简单的ping工具方法
Jan 31 Python
python远程连接MySQL数据库
Apr 19 Python
python3 实现的对象与json相互转换操作示例
Aug 17 Python
浅谈python中频繁的print到底能浪费多长时间
Feb 21 Python
基于matplotlib中ion()和ioff()的使用详解
Jun 16 Python
基于python实现操作git过程代码解析
Jul 27 Python
Python日志器使用方法及原理解析
Sep 27 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
收音机玩机评测 406 篇视频合集
2020/03/11 无线电
memcache命令启动参数中文解释
2014/01/13 PHP
PHP文件大小格式化函数合集
2014/03/10 PHP
php的dl函数用法实例
2014/11/06 PHP
php实现面包屑导航例子分享
2015/12/19 PHP
PHP实现的简单组词算法示例
2018/04/10 PHP
PHP常用字符串函数小结(推荐)
2018/08/05 PHP
javascript中的prototype属性使用说明(函数功能扩展)
2010/08/16 Javascript
High Performance JavaScript(高性能JavaScript)读书笔记分析
2011/05/05 Javascript
中文字符串截取的js函数代码
2013/04/17 Javascript
jquery实现两个图片渐变切换效果的方法
2015/06/25 Javascript
js中使用使用原型(prototype)定义方法的好处详解
2016/07/04 Javascript
基于jQuery实现中英文切换导航条效果
2016/09/18 Javascript
AngularJS中的按需加载ocLazyLoad示例
2017/01/11 Javascript
新手vue构建单页面应用实例代码
2017/09/18 Javascript
关于vue单文件中引用路径的处理方法
2018/01/08 Javascript
360doc网站不登录就无法复制内容的解决方法
2018/01/27 Javascript
JS使用iView的Dropdown实现一个右键菜单
2019/05/06 Javascript
bootstrap实现嵌套模态框的实例代码
2020/01/10 Javascript
基于JS实现计算24点算法代码实例解析
2020/07/23 Javascript
javascript前端和后台进行数据交互方法示例
2020/08/07 Javascript
js实现磁性吸附的示例
2020/10/26 Javascript
python实现的简单文本类游戏实例
2015/04/28 Python
Python中字典和集合学习小结
2017/07/07 Python
python 文件操作删除某行的实例
2017/09/04 Python
python出现&quot;IndentationError: unexpected indent&quot;错误解决办法
2017/10/15 Python
Python控制键盘鼠标pynput的详细用法
2019/01/28 Python
使用Python快乐学数学Github万星神器Manim简介
2019/08/07 Python
python实现PDF中表格转化为Excel的方法
2020/06/16 Python
Python手动或自动协程操作方法解析
2020/06/22 Python
《我要的是葫芦》教学反思
2014/02/23 职场文书
2014年车间主任工作总结
2014/12/10 职场文书
家长通知书家长意见
2015/06/03 职场文书
2015国庆节宣传语
2015/07/14 职场文书
SpringBoot2零基础到精通之数据与页面响应
2022/03/22 Java/Android
默认网关不可用修复后过一会又不好使了解决方法
2022/04/08 数码科技