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多线程threading.Lock锁用法实例
Nov 01 Python
详解详解Python中writelines()方法的使用
May 25 Python
matplotlib在python上绘制3D散点图实例详解
Dec 09 Python
python中判断文件编码的chardet(实例讲解)
Dec 21 Python
python PyTorch参数初始化和Finetune
Feb 11 Python
python 遍历目录(包括子目录)下所有文件的实例
Jul 11 Python
python批量修改图片大小的方法
Jul 24 Python
selenium设置proxy、headers的方法(phantomjs、Chrome、Firefox)
Nov 29 Python
Python 实现文件打包、上传与校验的方法
Feb 13 Python
python3实现绘制二维点图
Dec 04 Python
Django与pyecharts结合的实例代码
May 13 Python
Django vue前后端分离整合过程解析
Nov 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
第四节--构造函数和析构函数
2006/11/16 PHP
大家在抢红包,程序员在研究红包算法
2015/08/31 PHP
PHP基于SPL实现的迭代器模式示例
2018/04/22 PHP
java解析json方法总结
2019/05/16 PHP
使用laravel和ajax实现整个页面无刷新的操作方法
2019/10/03 PHP
PHP isset empty函数相关面试题及解析
2020/12/11 PHP
asp.net网站开发中用jquery实现滚动浏览器滚动条加载数据(类似于腾讯微博)
2012/03/14 Javascript
javascript移动设备Web开发中对touch事件的封装实例
2014/06/05 Javascript
js调试系列 初识控制台
2014/06/18 Javascript
js 加密压缩出现bug解决方案
2014/11/25 Javascript
鼠标经过子元素触发mouseout,mouseover事件的解决方案
2015/07/26 Javascript
jQuery 3.0 的变化及使用方法
2016/02/01 Javascript
浅析js绑定事件的常用方法
2016/05/15 Javascript
详解Nodejs的timers模块
2016/12/22 NodeJs
Angularjs中三种数据的绑定策略(“@”,“=”,“&”)
2016/12/23 Javascript
JavaScript之RegExp_动力节点Java学院整理
2017/06/29 Javascript
JS实现的简单折叠展开动画效果示例
2018/04/28 Javascript
webpack项目轻松混用css module的方法
2018/06/12 Javascript
vue-cli3+ts+webpack实现多入口多出口功能
2019/05/30 Javascript
vue浏览器返回监听的具体步骤
2021/02/03 Vue.js
Python编程实现二分法和牛顿迭代法求平方根代码
2017/12/04 Python
python操作excel的包(openpyxl、xlsxwriter)
2018/06/11 Python
python实现时间o(1)的最小栈的实例代码
2018/07/23 Python
利用CSS3的特性改变文本选中时的颜色
2013/09/11 HTML / CSS
websocket+sockjs+stompjs详解及实例代码
2018/11/30 HTML / CSS
初中女生自我鉴定
2013/12/19 职场文书
海飞丝广告词
2014/03/20 职场文书
青安岗事迹材料
2014/05/14 职场文书
2014年最新大专生职业生涯规划书范文
2014/09/13 职场文书
运动会400米加油稿(8篇)
2014/09/22 职场文书
2014年审计人员工作总结
2014/12/19 职场文书
个人先进材料范文
2014/12/30 职场文书
财务经理岗位职责范本
2015/04/08 职场文书
幼儿园见习总结
2015/06/23 职场文书
一起来看看Vue的核心原理剖析
2022/03/24 Vue.js
在Python 中将类对象序列化为JSON
2022/04/06 Python