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修改字典内key对应值的方法
Jul 11 Python
再谈Python中的字符串与字符编码(推荐)
Dec 14 Python
python的mysqldb安装步骤详解
Aug 14 Python
numpy判断数值类型、过滤出数值型数据的方法
Jun 09 Python
Python操作redis实例小结【String、Hash、List、Set等】
May 16 Python
python多继承(钻石继承)问题和解决方法简单示例
Oct 21 Python
Python 使用threading+Queue实现线程池示例
Dec 21 Python
在pycharm中为项目导入anacodna环境的操作方法
Feb 12 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
Jul 14 Python
基于python requests selenium爬取excel vba过程解析
Aug 12 Python
python使用scapy模块实现ping扫描的过程详解
Jan 21 Python
python实现scrapy爬虫每天定时抓取数据的示例代码
Jan 27 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中显示数组与对象的实现代码
2011/04/18 PHP
php版本的cron定时任务执行器使用实例
2014/08/19 PHP
PHP正则表达式入门教程(推荐)
2016/05/18 PHP
popdiv
2006/07/14 Javascript
初学Javascript的一些总结
2008/11/03 Javascript
W3C Group的JavaScript1.8 新特性介绍
2009/05/19 Javascript
javascript动态加载实现方法一
2012/08/22 Javascript
javascript函数式编程实例分析
2015/04/25 Javascript
Jquery中基本选择器用法实例详解
2015/05/18 Javascript
Bootstrap每天必学之弹出框(Popover)插件
2016/04/25 Javascript
jquery 获取select数组与name数组长度的实现代码
2016/06/20 Javascript
web 屏蔽BackSpace键实例代码
2016/12/24 Javascript
javascript 封装Date日期类实例详解
2017/05/28 Javascript
vue webpack打包优化操作技巧
2018/02/22 Javascript
JavaScript继承与多继承实例分析
2018/05/26 Javascript
axios实现简单文件上传功能
2019/09/25 Javascript
js实现旋转木马轮播图效果
2020/01/10 Javascript
Python实现爬取百度贴吧帖子所有楼层图片的爬虫示例
2018/04/26 Python
Windows下Anaconda2安装NLTK教程
2018/09/19 Python
元组列表字典(莫烦python基础)
2019/04/03 Python
基于python-opencv3的图像显示和保存操作
2019/06/27 Python
Python3离线安装Requests模块问题
2019/10/13 Python
解决Python图形界面中设置尺寸的问题
2020/03/05 Python
使用CSS3的::selection改变选中文本颜色的方法
2015/09/29 HTML / CSS
用HTML5制作烟火效果的教程
2015/05/12 HTML / CSS
芭比波朗加拿大官方网站:Bobbi Brown Cosmetics CA
2020/11/05 全球购物
小学岗位竞聘方案
2014/01/22 职场文书
演讲比赛获奖感言
2014/02/02 职场文书
合作协议书范本
2014/04/17 职场文书
保证书格式范文
2014/04/28 职场文书
节能环保标语
2014/06/12 职场文书
大学生党员批评与自我批评范文
2014/10/14 职场文书
2015年质检工作总结
2015/05/04 职场文书
教导处教学工作总结
2015/08/12 职场文书
小学二年级班主任工作经验交流材料
2015/11/02 职场文书
Nginx 配置 HTTPS的详细过程
2022/05/30 Servers