python调用shell的方法


Posted in Python onNovember 20, 2013

1.1  os.system(command)

在一个子shell中运行command命令,并返回command命令执行完毕后的退出状态。这实际上是使用C标准库函数system()实现的。这个函数在执行command命令时需要重新打开一个终端,并且无法保存command命令的执行结果。

1.2  os.popen(command,mode)

打开一个与command进程之间的管道。这个函数的返回值是一个文件对象,可以读或者写(由mode决定,mode默认是'r')。如果mode为'r',可以使用此函数的返回值调用read()来获取command命令的执行结果。

1.3  commands.getstatusoutput(command)

使用os. getstatusoutput ()函数执行command命令并返回一个元组(status,output),分别表示command命令执行的返回状态和执行结果。对command的执行实际上是按照{command;} 2>&1的方式,所以output中包含控制台输出信息或者错误信息。output中不包含尾部的换行符。

2.1  subprocess.call(["some_command","some_argument","another_argument_or_path"])

subprocess.call(command,shell=True)

2.2  subprocess.Popen(command, shell=True)

如果command不是一个可执行文件,shell=True不可省。
使用subprocess模块可以创建新的进程,可以与新建进程的输入/输出/错误管道连通,并可以获得新建进程执行的返回状态。使用subprocess模块的目的是替代os.system()、os.popen*()、commands.*等旧的函数或模块。
最简单的方法是使用class subprocess.Popen(command,shell=True)。Popen类有Popen.stdin,Popen.stdout,Popen.stderr三个有用的属性,可以实现与子进程的通信。

将调用shell的结果赋值给python变量

handle = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)
print handle.communicate()[0]

在Python/wxPython环境下,执行外部命令或者说在Python程序中启动另一个程序的方法一般有这么几个:

1、os.system(command)

2、wx.Execute(command, syn=wx.EXEC_ASYNC, callback=None)

若置syn为wx.EXEC_ASYNC则wx.Excute函数立即返回,若syn=wx.EXEC_SYNC则等待调用的程序结束后再返回。

callback是一个wx.Process变量,如果callback不为None且syn=wx.EXEC_ASYNC,则程序结束后将调用wx.Process.OnTerminate()函数。

os.system()和wx.Execute()都利用系统的shell,执行时会出现shell窗口。如在Windows下会弹出控制台窗口,不美观。下面的两种方法则没有这个缺点。

3、class subprocess.Popen

最简单的用法是:

import subprocess
subprocess.Popen(command, shell=True)

如果command不是一个可执行文件,shell=True不可省。

前面三个方法只能用于执行程序和打开文件,不能处理URL,打开URL地址可用webbrowser模块提供的功能。

4、webbrowser.open(url)

调用系统缺省浏览器打开URL地址,如 webbrowser.open('https://3water.com'),也可以利用
webbrowser.open('h:\python.zip')来执行程序。这样可以不必区分是文件名还是URL,不知道在Linux下是否可行。
以上在Windows2000,Python2.4a1,wxPython 2.5.1运行。
modify:还有一种方式:subprocess.call(*args, **kwargs)

Python 相关文章推荐
使用python实现knn算法
Dec 20 Python
利用Python暴力破解zip文件口令的方法详解
Dec 21 Python
python 获取字符串MD5值方法
May 29 Python
Django压缩静态文件的实现方法详析
Aug 26 Python
python递归法实现简易连连看小游戏
Mar 25 Python
详解python pandas 分组统计的方法
Jul 30 Python
scikit-learn线性回归,多元回归,多项式回归的实现
Aug 29 Python
Tensorflow的常用矩阵生成方式
Jan 04 Python
VSCode配合pipenv搞定虚拟环境的实现方法
May 17 Python
什么是Python变量作用域
Jun 03 Python
Python的信号库Blinker用法详解
Dec 31 Python
django中websocket的具体使用
Jan 22 Python
python和shell变量互相传递的几种方法
Nov 20 #Python
利用soaplib搭建webservice详细步骤和实例代码
Nov 20 #Python
python从ftp下载数据保存实例
Nov 20 #Python
python正则表达式抓取成语网站
Nov 20 #Python
python爬取网站数据保存使用的方法
Nov 20 #Python
使用python搭建Django应用程序步骤及版本冲突问题解决
Nov 19 #Python
python解析json实例方法
Nov 19 #Python
You might like
PDO版本问题 Invalid parameter number: no parameters were bound
2013/01/06 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
2014/09/28 PHP
JavaScript 关键字屏蔽实现函数
2009/08/02 Javascript
JavaScript 面向对象之命名空间
2010/05/04 Javascript
jquery+ajax每秒向后台发送请求数据然后返回页面的代码
2011/01/17 Javascript
Prototype源码浅析 Enumerable部分(二)
2012/01/18 Javascript
javascript:json数据的页面绑定示例代码
2014/01/26 Javascript
巧用jquery解决下拉菜单被Div遮挡的相关问题
2014/02/13 Javascript
javascript向后台传送相同属性的参数即数组参数
2014/02/17 Javascript
JQuery 图片滚动轮播示例代码
2014/03/24 Javascript
JavaScript常用的弹出广告及背投广告实现方法
2015/02/06 Javascript
jquery京东商城双11焦点图多图广告特效代码分享
2015/09/06 Javascript
使用OpenLayers3 添加地图鼠标右键菜单
2015/12/29 Javascript
JavaScript的设计模式经典之建造者模式
2016/02/24 Javascript
浅析JS原型继承与类的继承
2016/04/07 Javascript
javascript中JSON.parse()与eval()解析json的区别
2016/05/19 Javascript
nodeJs内存泄漏问题详解
2016/09/05 NodeJs
jquery中each循环的简单回滚操作
2017/05/05 jQuery
React.js中常用的ES6写法总结(推荐)
2017/05/09 Javascript
Layer.js实现表格溢出内容省略号显示,悬停显示全部的方法
2019/09/16 Javascript
JS Ajax请求会话过期处理问题解决方法分析
2019/11/16 Javascript
vue 使用post/get 下载导出文件操作
2020/08/07 Javascript
[01:08:17]2018DOTA2亚洲邀请赛3月29日 小组赛B组 EG VS VGJ.T
2018/03/30 DOTA
Python translator使用实例
2008/09/06 Python
如何在Python函数执行前后增加额外的行为
2016/10/20 Python
Python常见MongoDB数据库操作实例总结
2018/07/24 Python
使用50行Python代码从零开始实现一个AI平衡小游戏
2018/11/21 Python
详解从Django Rest Framework响应中删除空字段
2019/01/11 Python
Tensorflow中的降维函数tf.reduce_*使用总结
2020/04/20 Python
python 指定源路径来解决import问题的操作
2021/03/04 Python
KIEHL’S科颜氏官方旗舰店:源自美国的顶级护肤品牌
2018/06/07 全球购物
大家检讨书5000字
2014/02/03 职场文书
关于环保的标语
2014/06/13 职场文书
企业承诺书格式范文
2015/04/28 职场文书
宝葫芦的秘密观后感
2015/06/11 职场文书
外出培训学习心得体会
2016/01/18 职场文书