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中使用HTMLParser解析HTML的教程
Apr 29 Python
Python减少循环层次和缩进的技巧分析
Mar 15 Python
浅谈python数据类型及类型转换
Dec 18 Python
浅谈关于Python3中venv虚拟环境
Aug 01 Python
python 实现selenium断言和验证的方法
Feb 13 Python
python3 enum模块的应用实例详解
Aug 12 Python
python3 求约数的实例
Dec 05 Python
Keras之fit_generator与train_on_batch用法
Jun 17 Python
python入门:argparse浅析 nargs='+'作用
Jul 12 Python
如何使用scrapy中的ItemLoader提取数据
Sep 30 Python
详解pycharm自动import所需的库的操作方法
Nov 30 Python
Python绘制分类图的方法
Apr 20 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
全国FM电台频率大全 - 11 浙江省
2020/03/11 无线电
phpfans留言版用到的install.php
2007/01/04 PHP
PHP文件注释标记及规范小结
2012/04/01 PHP
thinkphp配置连接数据库技巧
2014/12/02 PHP
yii2中dropDownList实现二级和三级联动写法
2017/04/26 PHP
PHP基于DOMDocument解析和生成xml的方法分析
2017/07/17 PHP
对于this和$(this)的个人理解
2013/09/08 Javascript
js根据手机客户端浏览器类型,判断跳转官网/手机网站多个实例代码
2016/04/30 Javascript
js继承实现方法详解
2016/12/16 Javascript
vue2笔记 — vue-router路由懒加载的实现
2017/03/03 Javascript
Vue实现路由跳转和嵌套
2017/06/20 Javascript
vue 数组和对象不能直接赋值情况和解决方法(推荐)
2017/10/25 Javascript
JS模拟实现哈希表及应用详解
2018/05/04 Javascript
js循环map 获取所有的key和value的实现代码(json)
2018/05/09 Javascript
vue+element的表格实现批量删除功能示例代码
2018/08/17 Javascript
JS去除字符串最后的逗号实例分析【四种方法】
2019/06/20 Javascript
[01:27]2014DOTA2展望TI 剑指西雅图IG战队专访
2014/06/30 DOTA
[01:33]PWL开团时刻DAY2-开雾与反开雾
2020/10/31 DOTA
在Python中处理时间之clock()方法的使用
2015/05/22 Python
关于Pycharm无法debug问题的总结
2019/01/19 Python
python分数表示方式和写法
2019/06/26 Python
程序员的七夕用30行代码让Python化身表白神器
2019/08/07 Python
python2和python3应该学哪个(python3.6与python3.7的选择)
2019/10/01 Python
python cv2截取不规则区域图片实例
2019/12/21 Python
python plt可视化——打印特殊符号和制作图例代码
2020/04/17 Python
python3中sys.argv的实例用法
2020/04/24 Python
Spark处理数据排序问题如何避免OOM
2020/05/21 Python
keras处理欠拟合和过拟合的实例讲解
2020/05/25 Python
使用Python文件读写,自定义分隔符(custom delimiter)
2020/07/05 Python
Python加载数据的5种不同方式(收藏)
2020/11/13 Python
5个HTML5的常用本地存储方式详解与介绍
2021/03/27 HTML / CSS
优秀社区干部事迹材料
2014/02/03 职场文书
简历中的自我评价范文
2014/02/05 职场文书
酒店前台辞职书
2015/02/26 职场文书
SQL Server代理:理解SQL代理错误日志处理方法
2021/06/30 SQL Server
Vue3.0 手写放大镜效果
2021/07/25 Vue.js