举例讲解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批量修改文件后缀的方法
Jan 26 Python
python中django框架通过正则搜索页面上email地址的方法
Mar 21 Python
Python for Informatics 第11章 正则表达式(一)
Apr 21 Python
基于python select.select模块通信的实例讲解
Sep 21 Python
完美解决python中ndarray 默认用科学计数法显示的问题
Jul 14 Python
python读取txt文件,去掉空格计算每行长度的方法
Dec 20 Python
详解Python 定时框架 Apscheduler原理及安装过程
Jun 14 Python
tensorflow2.0与tensorflow1.0的性能区别介绍
Feb 07 Python
Python基于stuck实现scoket文件传输
Apr 02 Python
浅谈python opencv对图像颜色通道进行加减操作溢出
Jun 03 Python
Python运算符+与+=的方法实例
Feb 18 Python
Pytorch 中net.train 和 net.eval的使用说明
May 22 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警告Cannot use a scalar value as an array的解决方法
2012/01/11 PHP
str_replace只替换一次字符串的方法
2013/04/09 PHP
php格式化金额函数分享
2015/02/02 PHP
PHP简单实现生成txt文件到指定目录的方法
2016/04/25 PHP
thinkPHP5.0框架简单配置作用域的方法
2017/03/17 PHP
PHP排序算法之归并排序(Merging Sort)实例详解
2018/04/21 PHP
js left,right,mid函数
2008/06/10 Javascript
html向js方法传递参数具体实现
2013/08/08 Javascript
JS+DIV实现鼠标划过切换层效果的实例代码
2013/11/26 Javascript
jQuery选择器全集详解
2014/11/24 Javascript
JavaScript原生对象之Number对象的属性和方法详解
2015/03/13 Javascript
关于Node.js中Buffer的一些你可能不知道的用法
2017/03/28 Javascript
JS获取月的第几周和年的第几周实例代码
2018/12/05 Javascript
详解微信小程序网络请求接口封装实例
2019/05/02 Javascript
jQuery实现颜色打字机的完整代码
2020/03/19 jQuery
手写Vue2.0 数据劫持的示例
2021/03/04 Vue.js
python实现下载文件的三种方法
2017/02/09 Python
django启动uwsgi报错的解决方法
2018/04/08 Python
python和shell监控linux服务器的详细代码
2018/06/22 Python
transform python环境快速配置方法
2018/09/27 Python
django项目环境搭建及在虚拟机本地创建django项目的教程
2019/08/02 Python
Python中typing模块与类型注解的使用方法
2019/08/05 Python
Python Tornado之跨域请求与Options请求方式
2020/03/28 Python
8种常用的Python工具
2020/08/05 Python
css3 flex实现div内容水平垂直居中的几种方法
2020/03/27 HTML / CSS
adidas官方旗舰店:德国运动用品制造商
2017/11/25 全球购物
德国、奥地利和瑞士最大的旅行和度假门户网站:HolidayCheck
2019/11/14 全球购物
销售文员的岗位职责
2013/11/20 职场文书
写给女朋友的检讨书
2014/01/28 职场文书
彩色的非洲教学反思
2014/02/18 职场文书
平安工地建设方案
2014/05/06 职场文书
竞选学委演讲稿
2014/09/13 职场文书
公务员年度个人总结
2015/02/12 职场文书
实习报告怎么写
2019/06/20 职场文书
导游词之青城山景区
2019/09/27 职场文书
Python中的程序流程控制语句
2022/02/24 Python