举例讲解Python程序与系统shell交互的方式


Posted in Python onApril 09, 2015

概述

考虑这样一个问题,有hello.py脚本,输出”hello, world!”;有TestInput.py脚本,等待用户输入,然后打印用户输入的数据。那么,怎么样把hello.py输出内容发送给TestInput.py,最后TestInput.py打印接收到的”hello, world!”。下面我来逐步讲解一下shell的交互方式。

hello.py代码如下:

#!/usr/bin/python
print "hello, world!"

TestInput.py代码如下:

#!/usr/bin/python
str = raw_input()
print("input string is: %s" % str)

1.os.system(cmd)

这种方式只是执行shell命令,返回一个返回码(0表示执行成功,否则表示失败)

retcode = os.system("python hello.py")
print("retcode is: %s" % retcode);

输出:

hello, world!
retcode is: 0

2.os.popen(cmd)

执行命令并返回该执行命令程序的输入流或输出流.该命令只能操作单向流,与shell命令单向交互,不能双向交互.
返回程序输出流,用fouput变量连接到输出流

fouput = os.popen("python hello.py")
result = fouput.readlines()
print("result is: %s" % result);

输出:

result is: ['hello, world!\n']

返回输入流,用finput变量连接到输出流

finput = os.popen("python TestInput.py", "w")
finput.write("how are you\n")

输出:

input string is: how are you

3.利用subprocess模块

subprocess.call()

类似os.system(),注意这里的”shell=True”表示用shell执行命令,而不是用默认的os.execvp()执行.

f = call("python hello.py", shell=True)
print f

输出:

hello, world!
0

subprocess.Popen()

利用Popen可以是实现双向流的通信,可以将一个程序的输出流发送到另外一个程序的输入流.
Popen()是Popen类的构造函数,communicate()返回元组(stdoutdata, stderrdata).

p1 = Popen("python hello.py", stdin = None, stdout = PIPE, shell=True)
p2 = Popen("python TestInput.py", stdin = p1.stdout, stdout = PIPE, shell=True)
print p2.communicate()[0]
#other way
#print p2.stdout.readlines()

输出:

input string is: hello, world!

整合代码如下:

#!/usr/bin/python
import os
from subprocess import Popen, PIPE, call

retcode = os.system("python hello.py")
print("retcode is: %s" % retcode);

fouput = os.popen("python hello.py")
result = fouput.readlines()
print("result is: %s" % result);

finput = os.popen("python TestInput.py", "w")
finput.write("how are you\n")


f = call("python hello.py", shell=True)
print f

p1 = Popen("python hello.py", stdin = None, stdout = PIPE, shell=True)

p2 = Popen("python TestInput.py", stdin = p1.stdout, stdout = PIPE, shell=True)
print p2.communicate()[0]
#other way
#print p2.stdout.readlines()
Python 相关文章推荐
让python的Cookie.py模块支持冒号做key的方法
Dec 28 Python
python根据距离和时长计算配速示例
Feb 16 Python
Python迭代用法实例教程
Sep 08 Python
Python列表生成器的循环技巧分享
Mar 06 Python
Python中字符串对齐方法介绍
May 21 Python
Python使用while循环花式打印乘法表
Jan 28 Python
理想高通滤波实现Python opencv示例
Jan 30 Python
Django models.py应用实现过程详解
Jul 29 Python
python Web flask 视图内容和模板实现代码
Aug 23 Python
python字符串的拼接方法总结
Nov 18 Python
Pytorch 实现focal_loss 多类别和二分类示例
Jan 14 Python
用Python的绘图库(matplotlib)绘制小波能量谱
Apr 17 Python
使用Python中的cookielib模拟登录网站
Apr 09 #Python
列举Python中吸引人的一些特性
Apr 09 #Python
Python的Bottle框架的一些使用技巧介绍
Apr 08 #Python
在Python的框架中为MySQL实现restful接口的教程
Apr 08 #Python
简单介绍Python的轻便web框架Bottle
Apr 08 #Python
常见的在Python中实现单例模式的三种方法
Apr 08 #Python
分析Python的Django框架的运行方式及处理流程
Apr 08 #Python
You might like
关于手调机和数调机的选择
2021/03/02 无线电
PHP计算2点经纬度之间的距离代码
2013/08/12 PHP
YII中assets的使用示例
2014/07/31 PHP
php实现图片上传并利用ImageMagick生成缩略图
2016/03/14 PHP
分享php多功能图片处理类
2016/05/15 PHP
PHP抓取远程图片(含不带后缀的)教程详解
2016/10/21 PHP
iphone safari不支持position fixed的解决方法
2012/05/04 Javascript
在css加载完毕后自动判断页面是否加入css或js文件
2014/09/10 Javascript
Javascript判断文件是否存在(客户端/服务器端)
2014/09/16 Javascript
javascript实现的多个层切换效果通用函数实例
2015/07/06 Javascript
基于JQuery实现分隔条的功能
2016/06/17 Javascript
js简单正则验证汉字英文及下划线的方法
2016/11/28 Javascript
基于JS实现bookstore静态页面的实例代码
2017/02/22 Javascript
angular.js 路由及页面传参示例
2017/02/24 Javascript
JavaScript运动框架 多物体任意值运动(三)
2017/05/17 Javascript
小程序云开发初探(小结)
2018/10/24 Javascript
详解Webpack loader 之 file-loader
2018/11/07 Javascript
vue实现带复选框的树形菜单
2019/05/27 Javascript
JavaScript实现Excel表格效果
2020/02/07 Javascript
jQuery 添加元素和删除元素的方法
2020/07/15 jQuery
[01:01:25]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第三局
2016/02/27 DOTA
Python中常见的数据类型小结
2015/08/29 Python
利用Python获取赶集网招聘信息前篇
2016/04/18 Python
Python进阶-函数默认参数(详解)
2017/05/18 Python
Python实现的在特定目录下导入模块功能分析
2019/02/11 Python
python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析
2019/09/05 Python
python3.7 openpyxl 在excel单元格中写入数据实例
2020/09/01 Python
Python使用pickle进行序列化和反序列化的示例代码
2020/09/22 Python
家得宝加拿大家装网上商店:The Home Depot加拿大
2016/08/27 全球购物
Piercing Pagoda官网:耳环、戒指、项链、手链等
2020/09/28 全球购物
物流司机岗位职责
2013/12/28 职场文书
高三励志标语
2014/06/05 职场文书
2014年班组工作总结
2014/11/20 职场文书
导游词之太行山青龙峡
2020/01/14 职场文书
Python实现查询剪贴板自动匹配信息的思路详解
2021/07/09 Python
python缺失值填充方法示例代码
2022/12/24 Python