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中的条件判断语句
May 14 Python
Python进阶篇之字典操作总结
Nov 16 Python
Python 一句话生成字母表的方法
Jan 02 Python
Python面向对象程序设计OOP深入分析【构造函数,组合类,工具类等】
Jan 05 Python
树莓派用python中的OpenCV输出USB摄像头画面
Jun 22 Python
python字符串中匹配数字的正则表达式
Jul 03 Python
python日志模块logbook使用方法
Sep 19 Python
python利用openpyxl拆分多个工作表的工作簿的方法
Sep 27 Python
Django之form组件自动校验数据实现
Jan 14 Python
windows下的pycharm安装及其设置中文菜单
Apr 23 Python
浅析python 字典嵌套
Sep 29 Python
python定义具名元组实例操作
Feb 28 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中使用mktime获取时间戳的一个黑色幽默分析
2012/05/31 PHP
php常用hash加密函数
2014/11/22 PHP
php实现的mongodb操作类实例
2015/04/03 PHP
PHP实现图片上传并压缩
2015/12/22 PHP
CI框架实现cookie登陆的方法详解
2016/05/18 PHP
身份证号码前六位所代表的省,市,区, 以及地区编码下载
2007/04/12 Javascript
利用ajaxfileupload插件实现文件上传无刷新的具体方法
2013/06/08 Javascript
js清空表单数据的两种方式(遍历+reset)
2014/07/18 Javascript
JS限制文本框只能输入数字和字母方法
2015/02/28 Javascript
第一次接触神奇的Bootstrap菜单和导航
2016/08/01 Javascript
通过jquery实现页面的动画效果(实例代码)
2016/09/18 Javascript
微信小程序-form表单提交代码实例
2019/04/29 Javascript
vue项目中播放rtmp视频文件流的方法
2020/09/17 Javascript
[00:52]DOTA2齐天大圣预告片
2016/08/13 DOTA
Python字符转换
2008/09/06 Python
python socket 超时设置 errno 10054
2014/07/01 Python
python计算一个序列的平均值的方法
2015/07/11 Python
Python实现类似jQuery使用中的链式调用的示例
2016/06/16 Python
python中如何使用正则表达式的集合字符示例
2017/10/09 Python
Python实现翻转数组功能示例
2018/01/12 Python
python读取Excel实例详解
2018/08/17 Python
Python提取支付宝和微信支付二维码的示例代码
2019/02/15 Python
python 实现一个反向单位矩阵示例
2019/11/29 Python
Python hmac模块使用实例解析
2019/12/24 Python
Python之多进程与多线程的使用
2021/02/23 Python
CSS3 :default伪类选择器使用简介
2018/03/15 HTML / CSS
css3的focus-within选择器的使用
2020/05/11 HTML / CSS
基于Html5实现的react拖拽排序组件示例
2018/08/13 HTML / CSS
某科技软件测试面试题
2013/05/19 面试题
十八届三中全会宣传方案
2014/02/21 职场文书
艺术设计专业个人求职信
2014/04/10 职场文书
小学语文教研活动总结
2014/07/01 职场文书
机械操作工岗位职责
2014/08/08 职场文书
员工试用期自我评价
2014/09/18 职场文书
课改心得体会范文
2016/01/25 职场文书
python如何在word中存储本地图片
2021/04/07 Python