在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中用Ctrl+C终止多线程程序的问题解决
Mar 30 Python
python通过zlib实现压缩与解压字符串的方法
Nov 19 Python
Python urllib、urllib2、httplib抓取网页代码实例
May 09 Python
python 爬虫出现403禁止访问错误详解
Mar 11 Python
python3大文件解压和基本操作
Dec 15 Python
python中字符串变二维数组的实例讲解
Apr 03 Python
详解Django-restframework 之频率源码分析
Feb 27 Python
详解使用Python下载文件的几种方法
Oct 13 Python
PYTHON如何读取和写入EXCEL里面的数据
Oct 28 Python
Python网络爬虫四大选择器用法原理总结
Jun 01 Python
Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性(推荐)
Jul 03 Python
Python FuzzyWuzzy实现模糊匹配
Apr 28 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编程之高级技巧——利用Mysql函数
2006/10/09 PHP
一个MYSQL操作类
2006/11/16 PHP
php使用curl发送json格式数据实例
2013/12/17 PHP
php下foreach提示Warning:Invalid argument supplied for foreach()的解决方法
2014/11/11 PHP
smarty高级特性之过滤器的使用方法
2015/12/25 PHP
php进程间通讯实例分析
2016/07/11 PHP
PHP进阶学习之类的自动加载机制原理分析
2019/06/18 PHP
Javascript document.referrer判断访客来源网址
2020/05/15 Javascript
jQuery学习2 选择器的使用说明
2010/02/07 Javascript
使用jquery与图片美化checkbox和radio控件的代码(打包下载)
2010/11/11 Javascript
jQuery拖拽 &amp; 弹出层 介绍与示例
2013/12/27 Javascript
Yii2使用Bootbox插件实现自定义弹窗
2015/04/02 Javascript
jquery实现用户打分评分特效
2015/05/28 Javascript
Jquery组件easyUi实现表单验证示例
2016/08/23 Javascript
JavaScript浏览器对象模型BOM(BrowserObjectModel)实例详解
2016/11/29 Javascript
javascript数组去重常用方法实例分析
2017/04/11 Javascript
基于BootStrap的前端分页带省略号和上下页效果
2017/05/18 Javascript
Laravel整合Bootstrap 4的完整方案(推荐)
2018/01/25 Javascript
Vue EventBus自定义组件事件传递
2018/06/25 Javascript
4 种滚动吸顶实现方式的比较
2019/04/09 Javascript
JS实现滑动导航效果
2020/01/14 Javascript
vue监听键盘事件的相关总结
2021/01/29 Vue.js
Python的Django框架中自定义模版标签的示例
2015/07/20 Python
Python代码块批量添加Tab缩进的方法
2018/06/25 Python
Python如何爬取实时变化的WebSocket数据的方法
2019/03/09 Python
Python 使用双重循环打印图形菱形操作
2020/08/09 Python
Stuart Weitzman欧盟:美国奢华鞋履品牌
2017/05/24 全球购物
皇家道尔顿官网:Royal Doulton
2017/12/06 全球购物
美国潜水装备、水肺潜水和浮潜设备商店:Leisure Pro
2018/08/08 全球购物
什么是组件架构
2016/05/15 面试题
文言文形式的学生求职信
2013/12/03 职场文书
入党积极分子自我鉴定范文
2014/03/25 职场文书
国际贸易毕业生自荐书
2014/06/22 职场文书
小学作文指导之如何写人?
2019/07/08 职场文书
Django REST framework 限流功能的使用
2021/06/24 Python
JAVA SpringMVC实现自定义拦截器
2022/03/16 Python