Python与shell的3种交互方式介绍


Posted in Python onApril 11, 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!

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 Mysql数据库操作 Perl操作Mysql数据库
Jan 12 Python
python实现一次创建多级目录的方法
May 15 Python
好用的Python编辑器WingIDE的使用经验总结
Aug 31 Python
python回调函数中使用多线程的方法
Dec 25 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
Aug 02 Python
python判断一个数是否能被另一个整数整除的实例
Dec 12 Python
Django实现学生管理系统
Feb 26 Python
python matplotlib画图库学习绘制常用的图
Mar 19 Python
pandas factorize实现将字符串特征转化为数字特征
Dec 19 Python
python3操作注册表的方法(Url protocol)
Feb 05 Python
Python unittest单元测试框架实现参数化
Apr 29 Python
python和c语言哪个更适合初学者
Jun 22 Python
Python函数参数类型*、**的区别
Apr 11 #Python
Python中的多重装饰器
Apr 11 #Python
Python中的各种装饰器详解
Apr 11 #Python
将Django使用的数据库从MySQL迁移到PostgreSQL的教程
Apr 11 #Python
Python返回真假值(True or False)小技巧
Apr 10 #Python
Python选择排序、冒泡排序、合并排序代码实例
Apr 10 #Python
Python字符串中查找子串小技巧
Apr 10 #Python
You might like
php取整函数ceil,floo,round的用法及介绍
2013/08/31 PHP
twig里使用js变量的方法
2016/02/05 PHP
非常经典的PHP文件上传类分享
2016/05/15 PHP
JavaScript 版本自动生成文章摘要
2008/07/23 Javascript
循环 vs 递归浅谈
2013/02/28 Javascript
原生javascript兼容性测试实例
2013/07/01 Javascript
jQuery控制TR显示隐藏的几种方法
2014/06/18 Javascript
javascript使用prototype完成单继承
2014/12/24 Javascript
jsMind通过鼠标拖拽的方式调整节点位置
2015/04/13 Javascript
javascript实现的字符串与十六进制表示字符串相互转换方法
2015/07/17 Javascript
jquery衣服颜色选取插件效果代码分享
2015/08/28 Javascript
js调用父框架函数与弹窗调用父页面函数的简单方法
2016/11/01 Javascript
DOM事件探秘篇
2017/02/15 Javascript
基于jQuery的$.getScript方法去加载javaScript文档解析
2017/11/08 jQuery
深入理解requireJS-实现一个简单的模块加载器
2018/01/15 Javascript
详解Vue项目中出现Loading chunk {n} failed问题的解决方法
2018/09/14 Javascript
React中阻止事件冒泡的问题详析
2019/04/12 Javascript
vue 使用插槽分发内容操作示例【单个插槽、具名插槽、作用域插槽】
2020/03/06 Javascript
Vue实现返回顶部按钮实例代码
2020/10/21 Javascript
[01:06]DOTA2小知识课堂 Ep.01 TP出门不要忘记帮队友灌瓶哦
2019/12/05 DOTA
Python Trie树实现字典排序
2014/03/28 Python
Python程序员开发中常犯的10个错误
2014/07/07 Python
Python中处理时间的几种方法小结
2015/04/09 Python
python实现的简单抽奖系统实例
2015/05/22 Python
python使用pil进行图像处理(等比例压缩、裁剪)实例代码
2017/12/11 Python
python调用并链接MATLAB脚本详解
2019/07/05 Python
python numpy 常用随机数的产生方法的实现
2019/08/21 Python
python 采用paramiko 远程执行命令及报错解决
2019/10/21 Python
python实现七段数码管和倒计时效果
2019/11/23 Python
numpy的Fancy Indexing和array比较详解
2020/06/11 Python
优秀医生事迹材料
2014/02/12 职场文书
电影建党伟业观后感
2015/06/01 职场文书
公司考勤管理制度
2015/08/04 职场文书
幼儿园大班教师评语
2019/06/21 职场文书
Python基于百度API识别并提取图片中文字
2021/06/27 Python
Linux安装apache服务器的配置过程
2021/11/27 Servers