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实现把回车符\r\n转换成\n
Apr 23 Python
详解Python的Django框架中的通用视图
May 04 Python
学习python 之编写简单乘法运算题
Feb 27 Python
python 采集中文乱码问题的完美解决方法
Sep 27 Python
利用Python命令行传递实例化对象的方法
Nov 02 Python
np.newaxis 实现为 numpy.ndarray(多维数组)增加一个轴
Nov 30 Python
python读取raw binary图片并提取统计信息的实例
Jan 09 Python
python入门之基础语法学习笔记
Feb 08 Python
python中提高pip install速度
Feb 14 Python
python模拟实现分发扑克牌
Apr 22 Python
Python基于yaml文件配置logging日志过程解析
Jun 23 Python
一个非常简单好用的Python图形界面库(PysimpleGUI)
Dec 28 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脚本的10个技巧(4)
2006/10/09 PHP
ThinkPHP实现二级循环读取的方法
2014/11/03 PHP
2014最热门的24个php类库汇总
2014/12/18 PHP
php实现的mongodb操作类实例
2015/04/03 PHP
PHP实现的DES加密解密封装类完整实例
2017/04/29 PHP
Yii框架日志记录Logging操作示例
2018/07/12 PHP
使用swoole 定时器变更超时未支付订单状态的解决方案
2019/07/24 PHP
PHP tp5中使用原生sql查询代码实例
2020/10/28 PHP
javascript按位非运算符的使用方法
2013/11/14 Javascript
JS简单实现元素复制示例附图
2013/11/19 Javascript
JavaScript Ajax Json实现上下级下拉框联动效果实例代码
2013/11/23 Javascript
javascript+HTML5的Canvas实现Lab单车动画效果
2015/08/07 Javascript
jquery验证手机号是否正确实例讲解
2015/11/17 Javascript
设置jQueryUI DatePicker默认语言为中文
2016/06/04 Javascript
Seajs是什么及sea.js 由来,特点以及优势
2016/10/13 Javascript
jQuery简易时光轴实现方法示例
2017/03/13 Javascript
JS HTML图片显示Canvas 压缩功能
2017/07/21 Javascript
如何使用puppet替换文件中的string
2018/12/06 Javascript
JS监听滚动和id自动定位滚动
2018/12/18 Javascript
[01:02:07]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python删除服务器文件代码示例
2018/02/09 Python
Python使用tkinter库实现文本显示用户输入功能示例
2018/05/30 Python
pyqt 实现QlineEdit 输入密码显示成圆点的方法
2019/06/24 Python
Python进阶:生成器 懒人版本的迭代器详解
2019/06/29 Python
Python 中Django安装和使用教程详解
2019/07/03 Python
在python shell中运行python文件的实现
2019/12/21 Python
配置python的编程环境之Anaconda + VSCode的教程
2020/03/29 Python
Gap中国官网:美式休闲风服饰
2017/02/05 全球购物
GWT都有什么特性
2016/12/02 面试题
土建工程师岗位职责
2014/06/10 职场文书
2015初中教导处工作总结
2015/07/21 职场文书
2019奶茶店创业计划书范本!
2019/07/15 职场文书
python tqdm用法及实例详解
2021/06/16 Python
Spring Bean是如何初始化的详解
2022/03/22 Java/Android
详解Python中的for循环
2022/04/30 Python
纯CSS打字动画的实现示例
2022/08/05 HTML / CSS