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的接口测试框架实例
Nov 04 Python
Python 常用的安装Module方式汇总
May 06 Python
Python探索之实现一个简单的HTTP服务器
Oct 28 Python
PyQt5 QSerialPort子线程操作的实现
Apr 21 Python
python MNIST手写识别数据调用API的方法
Aug 08 Python
详解python 爬取12306验证码
May 10 Python
Python3.7 pyodbc完美配置访问access数据库
Oct 03 Python
jupyter notebook读取/导出文件/图片实例
Apr 16 Python
python多进程使用函数封装实例
May 02 Python
基于python实现获取网页图片过程解析
May 11 Python
python实现自动清理重复文件
Aug 24 Python
Python:__eq__和__str__函数的使用示例
Sep 26 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
phpmyadmin的#1251问题
2006/11/25 PHP
Gregarius中文日期格式问题解决办法
2008/04/22 PHP
解析PayPal支付接口的PHP开发方式
2010/11/28 PHP
php通过rmdir删除目录的简单用法
2015/03/18 PHP
告诉大家什么是JSON
2008/06/10 Javascript
jquery 元素相对定位代码
2010/10/15 Javascript
加载 Javascript 最佳实践
2011/10/30 Javascript
jquery中获取元素里某一特定子元素的代码
2014/12/02 Javascript
JavaScript基础重点(必看)
2016/07/09 Javascript
JQuery遍历元素的后代和同胞实现方法
2016/09/18 Javascript
简单实现node.js图片上传
2016/12/18 Javascript
Ionic+AngularJS实现登录和注册带验证功能
2017/02/09 Javascript
简单谈谈JS中的正则表达式
2017/09/11 Javascript
值得收藏的vuejs安装教程
2017/11/21 Javascript
JS温故而知新之变量提升和时间死区
2019/01/27 Javascript
vue实现图片预览组件封装与使用
2019/07/13 Javascript
Nodejs监控事件循环异常示例详解
2019/09/22 NodeJs
javascript设计模式之迭代器模式
2020/01/30 Javascript
如何基于jQuery实现五角星评分
2020/09/02 jQuery
Python在for循环中更改list值的方法【推荐】
2018/08/17 Python
Python中单线程、多线程和多进程的效率对比实验实例
2019/05/14 Python
Python-copy()与deepcopy()区别详解
2019/07/12 Python
Python时间序列缺失值的处理方法(日期缺失填充)
2019/08/11 Python
python基于pdfminer库提取pdf文字代码实例
2019/08/15 Python
python3.6编写的单元测试示例
2019/08/17 Python
pytorch+lstm实现的pos示例
2020/01/14 Python
Linux系统下升级pip的完整步骤
2021/01/31 Python
CSS3 3D位移translate效果实例介绍
2016/05/03 HTML / CSS
Stuart Weitzman美国官网:美国奢华鞋履品牌
2016/08/18 全球购物
计算机网络专业个人的自我评价
2013/10/17 职场文书
应届生会计求职信
2013/11/11 职场文书
领导党性分析材料
2014/02/15 职场文书
运动会入场口号
2014/06/07 职场文书
销售类求职信
2014/06/13 职场文书
2015年扶贫帮困工作总结
2015/05/20 职场文书
大学生,三分钟即兴演讲稿
2019/07/22 职场文书