举例讲解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 相关文章推荐
Linux下编译安装MySQL-Python教程
Feb 02 Python
Python爬取网页中的图片(搜狗图片)详解
Mar 23 Python
python下载图片实现方法(超简单)
Jul 21 Python
python如何为创建大量实例节省内存
Mar 20 Python
Python实用技巧之列表、字典、集合中根据条件筛选数据详解
Jul 11 Python
Python文件读写常见用法总结
Feb 22 Python
python里 super类的工作原理详解
Jun 19 Python
Django之提交表单与前后端交互的方法
Jul 19 Python
selenium+Chrome滑动验证码破解二(某某网站)
Dec 17 Python
Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
Apr 16 Python
python3.7+selenium模拟淘宝登录功能的实现
May 26 Python
浅谈如何使用python抓取网页中的动态数据实现
Aug 17 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中usort在值相同时改变原始位置问题的解决方法
2011/11/27 PHP
PHP分多步骤填写发布信息的简单方法实例代码
2012/09/23 PHP
php生成缩略图填充白边(等比缩略图方案)
2013/12/25 PHP
PHP遍历文件夹与文件类及处理类用法实例
2014/09/23 PHP
PHP实践教程之过滤、验证、转义与密码详解
2017/07/24 PHP
javascript 带有滚动条的表格,标题固定,带排序功能.
2009/11/13 Javascript
微信js-sdk界面操作接口用法示例
2016/10/12 Javascript
基于jQuery实现的查看全文功能【实用】
2016/12/11 Javascript
jQuery插件FusionCharts绘制的2D双面积图效果示例【附demo源码】
2017/04/11 jQuery
xmlplus组件设计系列之图标(ICON)(1)
2017/05/05 Javascript
JavaScript运行原理分析
2018/02/09 Javascript
vue axios 在页面切换时中断请求方法 ajax
2018/03/05 Javascript
通过封装scroll.js 获取滚动条的值
2018/07/13 Javascript
vue2.0+vue-router构建一个简单的列表页的示例代码
2019/02/13 Javascript
Vue 引入AMap高德地图的实现代码
2019/04/29 Javascript
vue项目在webpack2实现移动端字体自适配功能
2020/06/02 Javascript
解决Vue watch里调用方法的坑
2020/11/07 Javascript
夯基础之手撕javascript继承详解
2020/11/09 Javascript
[01:10:49]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
探究Python中isalnum()方法的使用
2015/05/18 Python
python获取外网ip地址的方法总结
2015/07/02 Python
深入理解python中的select模块
2017/04/23 Python
使用Pyinstaller的最新踩坑实战记录
2017/11/08 Python
PyCharm下载和安装详细步骤
2019/12/17 Python
pytorch下使用LSTM神经网络写诗实例
2020/01/14 Python
Tensorflow 多线程与多进程数据加载实例
2020/02/05 Python
python speech模块的使用方法
2020/09/09 Python
用html5绘制折线图的实例代码
2016/03/25 HTML / CSS
美国玛丽莎收藏奢华时尚商店:Marissa Collections
2016/11/21 全球购物
薇诺娜官方网上商城:专注敏感肌肤
2017/05/25 全球购物
PHP面试题集
2016/12/18 面试题
终止合同协议书
2014/04/17 职场文书
机关党员公开承诺书
2014/08/30 职场文书
员工福利申请报告
2015/05/15 职场文书
学生早退检讨书(范文)
2019/08/19 职场文书
Spring Boot 整合 Apache Dubbo的示例代码
2021/07/04 Java/Android