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代码来解图片迷宫的方法整理
Apr 02 Python
python中偏函数partial用法实例分析
Jul 08 Python
python利用requests库进行接口测试的方法详解
Jul 06 Python
Python全排列操作实例分析
Jul 24 Python
对django views中 request, response的常用操作详解
Jul 17 Python
Python requests获取网页常用方法解析
Feb 20 Python
python shapely.geometry.polygon任意两个四边形的IOU计算实例
Apr 12 Python
为什么说python适合写爬虫
Jun 11 Python
python中get和post有什么区别
Jun 19 Python
python利用google翻译方法实例(翻译字幕文件)
Sep 21 Python
Python模块常用四种安装方式
Oct 20 Python
python某漫画app逆向
Mar 31 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
收音机鉴频器对声音的影响和频偏分析
2021/03/02 无线电
PHP下操作Linux消息队列完成进程间通信的方法
2010/07/24 PHP
php 模拟GMAIL,HOTMAIL(MSN),YAHOO,163,126邮箱登录的详细介绍
2013/06/18 PHP
thinkphp模板继承实例简述
2014/11/26 PHP
php随机抽奖实例分析
2015/03/04 PHP
php无法连接mysql数据库的正确解决方法
2016/07/01 PHP
php输出文字乱码的解决方法
2019/10/04 PHP
jQuery中文入门指南,翻译加实例,jQuery的起点教程
2007/01/13 Javascript
Packer 3.0 JS压缩及混淆工具 下载
2007/05/03 Javascript
Javascript 类与静态类的实现(续)
2010/04/02 Javascript
JS Replace 全部替换字符的用法小结
2013/12/24 Javascript
jQuery简单实现input文本框内灰色提示文本效果的方法
2015/12/02 Javascript
js实现简单的验证码
2015/12/25 Javascript
Bootstrap实现响应式导航栏效果
2015/12/28 Javascript
Winform客户端向web地址传参接收参数的方法
2016/05/17 Javascript
js移动焦点到最后位置的简单方法
2016/11/25 Javascript
JavaScript仿微博输入框效果(案例分析)
2016/12/06 Javascript
input获取焦点时底部菜单被顶上来问题的解决办法
2017/01/24 Javascript
Vue获取DOM元素样式和样式更改示例
2017/03/07 Javascript
Bootstrap模态对话框中显示动态内容的方法
2018/08/10 Javascript
基于vue实现一个禅道主页拖拽效果
2019/05/27 Javascript
详解js创建对象的几种方式和对象方法
2021/03/01 Javascript
在centos7中分布式部署pyspider
2017/05/03 Python
HTML5 本地存储和内容按需加载的思路和方法
2011/04/07 HTML / CSS
会计专业自荐信
2013/12/02 职场文书
大学毕业自我评价
2014/02/02 职场文书
学雷锋演讲稿
2014/03/04 职场文书
优秀实习生主要事迹
2014/05/29 职场文书
有关环保的标语
2014/06/13 职场文书
干部个人对照检查材料
2014/08/25 职场文书
党员教师个人对照检查材料范文
2014/09/25 职场文书
2014年政务公开工作总结
2014/12/09 职场文书
ORACLE数据库对long类型字段进行模糊匹配的解决思路
2021/04/07 Oracle
nginx服务器的下载安装与使用详解
2021/08/02 Servers
spring cloud eureka 服务启动失败的原因分析及解决方法
2022/03/17 Java/Android
唤醒紫霞仙子,携手再游三界!大话手游X《大话西游》电影合作专属剧情任务
2022/04/03 其他游戏