在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 ljust rjust center输出
Sep 06 Python
Python中使用PyHook监听鼠标和键盘事件实例
Jul 18 Python
Python 实现12306登录功能实例代码
Feb 09 Python
Python2中文处理纪要的实现方法
Mar 10 Python
Python爬取数据并写入MySQL数据库的实例
Jun 21 Python
Python Tkinter 简单登录界面的实现
Jun 14 Python
200行python代码实现2048游戏
Jul 17 Python
django认证系统实现自定义权限管理的方法
Aug 28 Python
如何运行带参数的python脚本
Nov 15 Python
使用Python实现正态分布、正态分布采样
Nov 20 Python
python颜色随机生成器的实例代码
Jan 10 Python
Python基于codecs模块实现文件读写案例解析
May 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排序算法的复习和总结
2012/02/15 PHP
分享十款最出色的PHP安全开发库中文详细介绍
2015/03/22 PHP
PHP判断手机是IOS还是Android
2015/12/09 PHP
Zend Framework缓存Cache用法简单实例
2016/03/19 PHP
laravel解决迁移文件一次删除创建字段报错的问题
2019/10/24 PHP
javascript 动态修改样式和层叠样式表代码
2010/04/27 Javascript
js闭包的用途详解
2014/11/09 Javascript
Javascript控制input输入时间格式的方法
2015/01/28 Javascript
jquery动感漂浮导航菜单代码分享
2020/04/15 Javascript
jquery判断对象是否为空并遍历对象的简单实例
2016/07/26 Javascript
原生js仿浏览器滚动条效果
2017/03/02 Javascript
解析NodeJS异步I/O的实现
2017/04/13 NodeJs
原生js实现简单的模态框示例
2017/09/08 Javascript
为vue-router懒加载时下载js的过程中添加loading提示避免无响应问题
2018/04/03 Javascript
详解一个基于套接字实现长连接的express
2019/03/28 Javascript
微信小程序云开发 生成带参小程序码流程
2019/05/18 Javascript
vue 解决computed修改data数据的问题
2019/11/06 Javascript
在vue中使用防抖和节流,防止重复点击或重复上拉加载实例
2019/11/13 Javascript
vant实现购物车功能
2020/06/29 Javascript
jQuery实现动态加载瀑布流
2020/09/01 jQuery
vue axios请求成功却进入catch的原因分析
2020/09/08 Javascript
[01:18]DOTA2超级联赛专访hanci ForLove淘汰感言曝光
2013/06/04 DOTA
[01:10:02]IG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python字符串替换的2种方法
2014/11/30 Python
详解Python实现多进程异步事件驱动引擎
2017/08/25 Python
python微信跳一跳系列之棋子定位颜色识别
2018/02/26 Python
python批量从es取数据的方法(文档数超过10000)
2018/12/27 Python
Python 做曲线拟合和求积分的方法
2018/12/29 Python
打包PyQt5应用时的注意事项
2020/02/14 Python
CSS3的column-fill属性对齐列内容高度的用法详解
2016/07/01 HTML / CSS
阿里云:Aliyun.com
2017/02/15 全球购物
医学类个人求职信范文
2014/02/05 职场文书
计算机科学与技术专业求职信
2014/09/03 职场文书
国家税务局干部作风整顿整改措施
2014/09/18 职场文书
优秀大学生事迹材料
2014/12/24 职场文书
python垃圾回收机制原理分析
2022/04/13 Python