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编程中的异常处理教程
Aug 21 Python
python爬虫之xpath的基本使用详解
Apr 18 Python
Python 解决中文写入Excel时抛异常的问题
May 03 Python
python实现简易内存监控
Jun 21 Python
详解Django定时任务模块设计与实践
Jul 24 Python
详解python中的数据类型和控制流
Aug 08 Python
python子线程退出及线程退出控制的代码
Oct 16 Python
Pytorch 数据加载与数据预处理方式
Dec 31 Python
Django在Model保存前记录日志实例
May 14 Python
Python+PyQt5+MySQL实现天气管理系统
Jun 16 Python
Python函数调用追踪实现代码
Nov 27 Python
整理Python中常用的conda命令操作
Jun 15 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
Javascript客户端脚本的设计和应用
2006/08/21 Javascript
用nodejs访问ActiveX对象,以操作Access数据库为例。
2011/12/15 NodeJs
js控制frameSet示例
2013/09/10 Javascript
Jquery Ajax方法传值到action的方法
2014/05/11 Javascript
jQuery使用hide方法隐藏指定元素class样式用法实例
2015/03/30 Javascript
jquery日历插件datepicker用法分析
2016/01/22 Javascript
AngularJS转换响应内容
2016/01/27 Javascript
AngularJS  $on、$emit和$broadcast的使用
2016/09/05 Javascript
node.js缺少mysql模块运行报错的解决方法
2016/11/13 Javascript
如何使用headjs来管理和异步加载js
2016/11/29 Javascript
EasyUI Tree树组件无限循环的解决方法
2017/09/27 Javascript
angularjs实现猜大小功能
2017/10/23 Javascript
vue路由导航守卫和请求拦截以及基于node的token认证的方法
2019/04/07 Javascript
nodejs对项目下所有空文件夹创建gitkeep的方法
2019/08/02 NodeJs
基于JS实现table导出Excel并保留样式
2020/05/19 Javascript
javascript前端和后台进行数据交互方法示例
2020/08/07 Javascript
浅析JavaScript 函数柯里化
2020/09/08 Javascript
[01:38]女王驾到——至宝魔廷新尊技能&特效展示
2020/06/16 DOTA
python简单线程和协程学习心得(分享)
2017/06/14 Python
python实现决策树、随机森林的简单原理
2018/03/26 Python
教你使用python画一朵花送女朋友
2018/03/29 Python
Django框架的中的setting.py文件说明详解
2018/10/15 Python
python UDP(udp)协议发送和接收的实例
2019/07/22 Python
浅谈keras2 predict和fit_generator的坑
2020/06/17 Python
Python 爬虫性能相关总结
2020/08/03 Python
求两个数的乘积和商数,该作用由宏定义来实现
2013/03/13 面试题
心理健康教育心得体会
2013/12/29 职场文书
办公室前台岗位职责
2014/01/04 职场文书
如何写一份好的英文求职信
2014/03/19 职场文书
小学老师寄语大全
2014/04/04 职场文书
《赠汪伦》教学反思
2014/04/12 职场文书
优秀毕业生找工作自荐信
2014/06/23 职场文书
收入证明范本
2015/06/12 职场文书
利用Python判断整数是否是回文数的3种方法总结
2021/07/07 Python
【海涛dota解说】DCG联赛第一周 LGD VS DH
2022/04/01 DOTA
Nginx配置之禁止指定IP访问
2022/05/02 Servers