举例讲解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 04 Python
Python从MP3文件获取id3的方法
Jun 15 Python
Python学习之用pygal画世界地图实例
Dec 07 Python
Python正则表达式指南 推荐
Oct 09 Python
解决Pycharm运行时找不到文件的问题
Oct 29 Python
Python找出微信上删除你好友的人脚本写法
Nov 01 Python
python3.4爬虫demo
Jan 22 Python
python 将日期戳(五位数时间)转换为标准时间
Jul 11 Python
对Pytorch中Tensor的各种池化操作解析
Jan 03 Python
Python中内建模块collections如何使用
May 27 Python
Python接收手机短信的代码整理
Aug 02 Python
Django url 路由匹配过程详解
Jan 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在线打包程序源码
2008/07/27 PHP
朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)
2015/01/26 PHP
两款万能的php分页类
2015/11/12 PHP
js 判断 enter 事件
2009/02/12 Javascript
Javascript 面试题随笔
2011/03/31 Javascript
疯狂Jquery第一天(Jquery学习笔记)
2012/05/11 Javascript
jQuery中关于ScrollableGridPlugin.js(固定表头)插件的使用逐步解析
2014/07/17 Javascript
JavaScript数值转换的三种方式总结
2014/07/31 Javascript
c#+jquery实现获取radio和checkbox的值
2020/09/12 Javascript
javascript文件加载管理简单实现方法
2015/07/25 Javascript
AngularJS 实现按需异步加载实例代码
2015/10/18 Javascript
JavaScript字符串常用的方法
2016/03/10 Javascript
jQuery.form.js的使用详解
2017/06/14 jQuery
使用Dropzone.js上传的示例代码
2017/10/10 Javascript
vue中引入第三方字体文件的方法示例
2018/12/17 Javascript
微信小程序城市选择及搜索功能的方法
2019/03/22 Javascript
jQuery实现动态生成年月日级联下拉列表示例
2019/05/11 jQuery
JS中的一些常用的函数式编程术语
2019/06/15 Javascript
微信小程序swiper左右扩展各显示一半代码实例
2019/12/05 Javascript
原生javascript单例模式的应用实例分析
2020/02/23 Javascript
详解如何使用React Hooks请求数据并渲染
2020/10/18 Javascript
Win7上搭建Cocos2d-x 3.1.1开发环境
2014/07/03 Python
pygame学习笔记(6):完成一个简单的游戏
2015/04/15 Python
Python写的一个简单监控系统
2015/06/19 Python
在Django中创建第一个静态视图
2015/07/15 Python
Python正规则表达式学习指南
2016/08/02 Python
Python的mysql数据库的更新如何实现
2017/07/31 Python
python如何发布自已pip项目的方法步骤
2018/10/09 Python
python3.6中@property装饰器的使用方法示例
2019/08/17 Python
Django 实现xadmin后台菜单改为中文
2019/11/15 Python
Python Django form 组件动态从数据库取choices数据实例
2020/05/19 Python
python 读取.nii格式图像实例
2020/07/01 Python
python 如何对logging日志封装
2020/12/02 Python
校园活动宣传方案
2014/03/28 职场文书
公司清洁工岗位职责
2015/04/15 职场文书
SSM VUE Axios详解
2021/10/05 Vue.js