举例讲解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在控制台输出进度条的方法
Jun 20 Python
给你选择Python语言实现机器学习算法的三大理由
Nov 15 Python
浅谈Python中range和xrange的区别
Dec 20 Python
Python实现生成随机数据插入mysql数据库的方法
Dec 25 Python
Python Pexpect库的简单使用方法
Jan 29 Python
python将邻接矩阵输出成图的实现
Nov 21 Python
浅析pip安装第三方库及pycharm中导入第三方库的问题
Mar 10 Python
python和pywin32实现窗口查找、遍历和点击的示例代码
Apr 01 Python
pandas中的ExcelWriter和ExcelFile的实现方法
Apr 24 Python
python ETL工具 pyetl
Jun 07 Python
python字典key不能是可以是啥类型
Aug 04 Python
Python max函数中key的用法及原理解析
Jun 26 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
php中使用exec,system等函数调用系统命令的方法(不建议使用,可导致安全问题)
2012/09/07 PHP
使用淘宝IP库获取用户ip地理位置
2013/10/27 PHP
thinkphp中字符截取函数msubstr()用法分析
2016/01/09 PHP
PHP自带方法验证邮箱、URL、IP是否合法的函数
2016/12/08 PHP
javascript concat数组累加 示例
2009/09/03 Javascript
jQuery 行级解析读取XML文件(附源码)
2009/10/12 Javascript
基于jQuery的Tab选项框效果代码(插件)
2011/03/01 Javascript
Js 代码中,ajax请求地址后加随机数防止浏览器缓存的原因
2013/05/07 Javascript
常用的JavaScript验证正则表达式汇总
2013/11/26 Javascript
js计算系统当前日期是星期几的方法
2016/07/14 Javascript
初识简单却不失优雅的Vue.js
2016/09/12 Javascript
微信小程序实现留言功能
2018/10/31 Javascript
Windows下Node爬虫神器Puppeteer安装记
2019/01/09 Javascript
js变量声明var使用与不使用的区别详解
2019/01/21 Javascript
JS扁平化输出数组的2种方法解析
2019/09/17 Javascript
解决windows下Sublime Text 2 运行 PyQt 不显示的方法分享
2014/06/18 Python
Python中返回字典键的值的values()方法使用
2015/05/22 Python
python爬虫框架talonspider简单介绍
2017/06/09 Python
Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】
2018/08/07 Python
python实现随机漫步算法
2018/08/27 Python
Python3中在Anaconda环境下安装basemap包
2018/10/21 Python
python 解决函数返回return的问题
2020/12/05 Python
No module named ‘win32gui‘ 的解决方法(踩坑之旅)
2021/02/18 Python
static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
2015/02/22 面试题
Linux开机引导的步骤是什么
2014/02/26 面试题
启动一个线程是用run()还是start()
2016/12/25 面试题
传播学毕业生求职信
2013/10/11 职场文书
学习决心书
2014/03/11 职场文书
房产销售独家委托书范本
2014/10/01 职场文书
群众路线党员个人剖析材料
2014/10/08 职场文书
法律讲堂观后感
2015/06/11 职场文书
Nginx访问日志及错误日志参数说明
2021/03/31 Servers
react如何快速设置文件路径别名
2021/04/28 Javascript
如何设计高效合理的MySQL查询语句
2021/05/26 MySQL
vue3语法糖内的defineProps及defineEmits
2022/04/14 Vue.js
python的html标准库
2022/04/29 Python