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编写的微博应用
Oct 17 Python
使用C语言扩展Python程序的简单入门指引
Apr 14 Python
python去除所有html标签的方法
May 05 Python
Python内建函数之raw_input()与input()代码解析
Oct 26 Python
TensorFlow实现非线性支持向量机的实现方法
Apr 28 Python
对python中Json与object转化的方法详解
Dec 31 Python
关于Python内存分配时的小秘密分享
Sep 05 Python
python 实现检验33品种数据是否是正态分布
Dec 09 Python
python3读取csv文件任意行列代码实例
Jan 13 Python
Python Numpy库常见用法入门教程
Jan 16 Python
python numpy矩阵信息说明,shape,size,dtype
May 22 Python
python创建文本文件的简单方法
Aug 30 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基于Snoopy解析网页html的方法
2015/07/09 PHP
php用户注册信息验证正则表达式
2015/11/12 PHP
php生出随机字符串
2017/07/06 PHP
PHP的mysqli_stmt_init()函数讲解
2019/01/24 PHP
贴一个在Mozilla中常用的Javascript代码
2007/01/09 Javascript
innerText和textContent对比及使用介绍
2013/02/27 Javascript
javascript实现焦点滚动图效果 具体方法
2013/06/24 Javascript
使用C++为node.js写扩展模块
2015/04/22 Javascript
jQuery使用$.ajax提交表单完整实例
2015/12/11 Javascript
基于JavaScript实现动态创建表格和增加表格行数
2015/12/20 Javascript
SpringMVC简单整合Angular2的示例
2017/07/31 Javascript
利用Vue2.x开发实现JSON树的方法
2018/01/04 Javascript
浅谈VUE单页应用首屏加载速度优化方案
2018/08/28 Javascript
详解vue 自定义marquee无缝滚动组件
2019/04/09 Javascript
JS实现的对象去重功能示例
2019/06/04 Javascript
使用VScode 插件debugger for chrome 调试react源码的方法
2019/09/13 Javascript
微信小程序静默登录的实现代码
2020/01/08 Javascript
vuejs element table 表格添加行,修改,单独删除行,批量删除行操作
2020/07/18 Javascript
vue 实现根据data中的属性值来设置不同的样式
2020/08/04 Javascript
Node.js中的异步生成器与异步迭代详解
2021/01/31 Javascript
[04:22]DOTA2上海特级锦标赛主赛事第四日TOP10
2016/03/06 DOTA
python中精确输出JSON浮点数的方法
2014/04/18 Python
使用Python构建Hopfield网络的教程
2015/04/14 Python
基于python中theano库的线性回归
2018/08/31 Python
pygame游戏之旅 调用按钮实现游戏开始功能
2018/11/21 Python
Python openpyxl读取单元格字体颜色过程解析
2019/09/03 Python
python实现根据文件格式分类
2019/10/31 Python
python使用yield压平嵌套字典的超简单方法
2019/11/02 Python
flask框架渲染Jinja模板与传入模板变量操作详解
2020/01/25 Python
python分别打包出32位和64位应用程序
2020/02/18 Python
Html5 webview元素定位工具的实现
2020/08/07 HTML / CSS
感恩节红领巾广播稿
2014/02/11 职场文书
邮政竞聘演讲稿
2014/09/03 职场文书
幼儿园2015年度工作总结
2015/04/01 职场文书
个人收入证明格式
2015/06/24 职场文书
CSS3实现的3D隧道效果
2021/04/27 HTML / CSS