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的即时标记项目练习笔记
Sep 18 Python
Python中的元类编程入门指引
Apr 15 Python
python实现数组插入新元素的方法
May 22 Python
黑科技 Python脚本帮你找出微信上删除你好友的人
Jan 07 Python
Saltstack快速入门简单汇总
Mar 01 Python
Linux 发邮件磁盘空间监控(python)
Apr 23 Python
基于Python的微信机器人开发 微信登录和获取好友列表实现解析
Aug 21 Python
Python实现socket非阻塞通讯功能示例
Nov 06 Python
Python笔记之观察者模式
Nov 20 Python
使用python-Jenkins批量创建及修改jobs操作
May 12 Python
浅谈keras中的batch_dot,dot方法和TensorFlow的matmul
Jun 18 Python
python process模块的使用简介
May 14 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 $_SERVER当前完整url的写法
2009/11/12 PHP
浅谈PHP中单引号和双引号到底有啥区别呢?
2015/03/04 PHP
PHP 等比例缩放图片详解及实例代码
2016/09/18 PHP
Apply an AutoFormat to an Excel Spreadsheet
2007/06/12 Javascript
JQuery 绑定事件时传递参数的实现方法
2009/10/13 Javascript
jquery last-child 列表最后一项的样式
2010/01/22 Javascript
JS保留两位小数 四舍五入函数的小例子
2013/11/20 Javascript
ajaxFileUpload.js插件支持多文件上传的方法
2014/09/02 Javascript
JS烟花背景效果实现方法
2015/03/03 Javascript
3kb jQuery代码搞定各种树形选择的实现方法
2016/06/10 Javascript
防止Node.js中错误导致进程阻塞的办法
2016/08/11 Javascript
解决vue-cli创建项目的loader问题
2018/03/13 Javascript
Angular中使用better-scroll插件的方法
2018/03/27 Javascript
layui实现文件或图片上传记录
2018/08/28 Javascript
ES6知识点整理之函数数组参数的默认值及其解构应用示例
2019/04/17 Javascript
详解VUE Element-UI多级菜单动态渲染的组件
2019/04/25 Javascript
python使用win32com库播放mp3文件的方法
2015/05/30 Python
python实现单链表中删除倒数第K个节点的方法
2018/09/28 Python
python中的tcp示例详解
2018/12/09 Python
Python HTML解析模块HTMLParser用法分析【爬虫工具】
2019/04/05 Python
Python使用百度api做人脸对比的方法
2019/08/28 Python
Django缓存Cache使用详解
2020/11/30 Python
声明struct x1 { . . . }; 和typedef struct { . . . }x2;有什么不同
2012/06/02 面试题
个人收入证明范本
2014/01/12 职场文书
小学体育教学反思
2014/01/31 职场文书
《威尼斯的小艇》教学反思
2014/02/17 职场文书
支行行长竞聘演讲稿
2014/05/15 职场文书
激励口号大全
2014/06/17 职场文书
学习普通话的体会
2014/11/07 职场文书
公司给客户的感谢信
2015/01/23 职场文书
围城读书笔记
2015/06/26 职场文书
鲁滨逊漂流记读书笔记
2015/06/26 职场文书
《月光曲》教学反思
2016/02/16 职场文书
css3实现背景图片半透明内容不透明的方法示例
2021/04/13 HTML / CSS
使用javascript解析二维码的三种方式
2021/11/11 Javascript
一行Python命令实现批量加水印
2022/04/07 Python