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实现异步回调机制代码分享
Jan 10 Python
python合并文本文件示例
Feb 07 Python
python简单读取大文件的方法
Jul 01 Python
基于scrapy的redis安装和配置方法
Jun 13 Python
Python类的继承用法示例
Jan 31 Python
Python实现的统计文章单词次数功能示例
Jul 08 Python
python 日期排序的实例代码
Jul 11 Python
使用matplotlib绘制图例标签中带有公式的图
Dec 13 Python
Pytorch中实现只导入部分模型参数的方式
Jan 02 Python
python3 xpath和requests应用详解
Mar 06 Python
Python如何创建装饰器时保留函数元信息
Aug 07 Python
如何创建一个Flask项目并进行简单配置
Nov 18 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
PHP生成带有雪花背景的验证码
2006/10/09 PHP
ADODB类使用
2006/11/25 PHP
PHP实现手机归属地查询API接口实现代码
2012/08/27 PHP
thinkPHP数据库增删改查操作方法实例详解
2016/12/06 PHP
javascript中substr,substring,slice.splice的区别说明
2010/11/25 Javascript
js自执行函数的几种不同写法的比较
2012/08/16 Javascript
JavaScript基础函数整理汇总
2015/01/30 Javascript
javascript数据结构之二叉搜索树实现方法
2015/11/25 Javascript
详解javascript事件冒泡
2016/01/09 Javascript
jQuery+Ajax+PHP弹出层异步登录效果(附源码下载)
2016/05/27 Javascript
关于微信中a链接无法跳转问题
2016/08/02 Javascript
Jquery删除css属性的简单方法
2016/12/04 Javascript
使用koa-log4管理nodeJs日志笔记的使用方法
2018/11/30 NodeJs
vue中组件的3种使用方式详解
2019/03/23 Javascript
微信小程序遍历Echarts图表实现多个饼图
2019/04/25 Javascript
微信小程序template模板与component组件的区别和使用详解
2019/05/22 Javascript
关于layui toolbar和template的结合使用方法
2019/09/19 Javascript
jquery 时间戳转日期过程详解
2019/10/12 jQuery
解决微信授权成功后点击按返回键出现空白页和报错的问题
2020/06/08 Javascript
[01:35]辉夜杯战队访谈宣传片—iG.V
2015/12/25 DOTA
python代码 if not x: 和 if x is not None: 和 if not x is None:使用介绍
2016/09/21 Python
python正则表达式的使用
2017/06/12 Python
python实现寻找最长回文子序列的方法
2018/06/02 Python
tensorflow实现图像的裁剪和填充方法
2018/07/27 Python
在Python中定义一个常量的方法
2018/11/10 Python
浅析Python3中的对象垃圾收集机制
2019/06/06 Python
python实现读取类别频数数据画水平条形图案例
2020/04/24 Python
keras训练浅层卷积网络并保存和加载模型实例
2020/07/02 Python
python脚本第一行如何写
2020/08/30 Python
pycharm 2020.2.4 pip install Flask 报错 Error:Non-zero exit code的问题
2020/12/04 Python
HTML5的语法变化介绍
2013/08/13 HTML / CSS
2015年暑期社会实践总结
2015/07/13 职场文书
祝福语集锦:给百岁老人祝寿贺词
2019/11/19 职场文书
MySQL中order by的使用详情
2021/11/17 MySQL
MySQL数据库索引的最左匹配原则
2021/11/20 MySQL
磁贴还没死, 微软Win11可修改注册表找回Win10开始菜单
2021/11/21 数码科技