Python中subprocess模块用法实例详解


Posted in Python onMay 20, 2015

本文实例讲述了Python中subprocess模块用法。分享给大家供大家参考。具体如下:

执行命令:

>>> subprocess.call(["ls", "-l"])
0
>>> subprocess.call("exit 1", shell=True)
1

测试调用系统中cmd命令,显示命令执行的结果:

x=subprocess.check_output(["echo", "Hello World!"],shell=True)
print(x)
"Hello World!"

测试在python中显示文件内容:

y=subprocess.check_output(["type", "app2.cpp"],shell=True)
print(y) 
#include <iostream>   
using namespace std;  
......

查看ipconfig -all命令的输出,并将将输出保存到文件tmp.log中:

handle = open(r'd:\tmp.log','wt')
subprocess.Popen(['ipconfig','-all'], stdout=handle)

查看网络设置ipconfig -all,保存到变量中:

output = subprocess.Popen(['ipconfig','-all'], stdout=subprocess.PIPE,shell=True)
oc=output.communicate()#取出output中的字符串
#communicate() returns a tuple (stdoutdata, stderrdata).
print(oc[0]) #打印网络信息
Windows IP Configuration
    Host Name . . . . .

我们可以在Popen()建立子进程的时候改变标准输入、标准输出和标准错误,并可以利用subprocess.PIPE将多个子进程的输入和输出连接在一起,构成管道(pipe):

child1 = subprocess.Popen(["dir","/w"], stdout=subprocess.PIPE,shell=True)
child2 = subprocess.Popen(["wc"], stdin=child1.stdout,stdout=subprocess.PIPE,shell=True)
out = child2.communicate()
print(out)
 ('   9   24   298\n', None)

如果想频繁地和子线程通信,那么不能使用communicate();因为communicate通信一次之后即关闭了管道.这时可以试试下面的方法:

p= subprocess.Popen(["wc"], stdin=subprocess.PIPE,stdout=subprocess.PIPE,shell=True)
p.stdin.write('your command')
p.stdin.flush()
#......do something
try:
  #......do something
  p.stdout.readline()
  #......do something
except:
  print('IOError')
#......do something more
p.stdin.write('your other command')
p.stdin.flush()
#......do something more

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
简单讲解Python中的闭包
Aug 11 Python
人脸识别经典算法一 特征脸方法(Eigenface)
Mar 13 Python
Python实现爬虫设置代理IP和伪装成浏览器的方法分享
May 07 Python
Python3基于sax解析xml操作示例
May 22 Python
Python对象属性自动更新操作示例
Jun 15 Python
Python解决走迷宫问题算法示例
Jul 27 Python
Python网络爬虫之爬取微博热搜
Apr 18 Python
Python PyQt5 Pycharm 环境搭建及配置详解(图文教程)
Jul 16 Python
Python对接六大主流数据库(只需三步)
Jul 31 Python
Python可视化工具如何实现动态图表
Oct 23 Python
pycharm使用技巧之自动调整代码格式总结
Nov 04 Python
python 批量下载bilibili视频的gui程序
Nov 20 Python
python检测某个变量是否有定义的方法
May 20 #Python
Python实现在matplotlib中两个坐标轴之间画一条直线光标的方法
May 20 #Python
python使用PyGame模块播放声音的方法
May 20 #Python
python实现带声音的摩斯码翻译实现方法
May 20 #Python
python定时检查某个进程是否已经关闭的方法
May 20 #Python
Python操作列表之List.insert()方法的使用
May 20 #Python
Python中List.index()方法的使用教程
May 20 #Python
You might like
php array_intersect()函数使用代码
2009/01/14 PHP
php判断电脑访问、手机访问的例子
2014/05/10 PHP
分享自定义的几个PHP功能函数
2015/04/15 PHP
php为字符串前后添加指定数量字符的方法
2015/05/04 PHP
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
2016/03/22 PHP
PHP MYSQL简易交互式站点开发
2016/12/27 PHP
学习javascript面向对象 掌握创建对象的9种方式
2016/01/04 Javascript
Webwork 实现文件上传下载代码详解
2016/02/02 Javascript
Node.js 应用跑得更快 10 个技巧
2016/04/03 Javascript
浅谈json取值(对象和数组)
2016/06/24 Javascript
jQuery插件zTree实现删除树节点的方法示例
2017/03/08 Javascript
微信小程序中子页面向父页面传值实例详解
2017/03/20 Javascript
jQuery中animate()的使用方法及解决$(”body“).animate({“scrollTop”:top})不被Firefox支持的问题
2017/04/04 jQuery
详解ECMAScript6入门--Class对象
2017/04/27 Javascript
jfinal与bootstrap的登出实战详解
2017/11/27 Javascript
微信小程序实现刷脸登录
2018/05/25 Javascript
使用异步组件优化Vue应用程序的性能
2019/04/28 Javascript
详解Vue的watch中的immediate与watch是什么意思
2019/12/30 Javascript
基于javascript的无缝滚动动画实现2
2020/08/07 Javascript
video.js添加自定义组件的方法
2020/12/09 Javascript
原生js实现自定义难度的扫雷游戏
2021/01/22 Javascript
[01:58]DOTA2上海特级锦标赛现场采访:RTZ这个ID到底好不好
2016/03/25 DOTA
paramiko模块安装和使用(远程登录服务器)
2014/01/27 Python
python使用PyGame模块播放声音的方法
2015/05/20 Python
Python安装第三方库的3种方法
2015/06/21 Python
python爬虫 execjs安装配置及使用
2019/07/30 Python
有关Tensorflow梯度下降常用的优化方法分享
2020/02/04 Python
python是怎么被发明的
2020/06/15 Python
一文详述 Python 中的 property 语法
2020/09/01 Python
使用HTML5 IndexDB存储图像和文件的示例
2018/11/05 HTML / CSS
SkinCeuticals官网:美国药妆品牌
2018/04/19 全球购物
JAVA招聘远程笔试题
2015/07/23 面试题
宾馆总经理岗位职责
2014/02/14 职场文书
副主任竞聘演讲稿
2014/08/18 职场文书
起诉书范文
2015/05/20 职场文书
解析redis hash应用场景和常用命令
2021/08/04 Redis