Python使用标准库subprocess调用外部程序

Python标准库subprocess中提供了很多调用外部程序创建子进程的对象,本文重点演示Popen对象的stdin和stdout属性的用法。

假设有一个程序externProgram.py,内容如下:

x = input()

print('hello world', x)

然后编写测试程序test.py,内容如下:

from subprocess import PIPE, Popen

text = '董付国'

test = Popen('python externProgram.py',

stdin=PIPE,

stdout=PIPE,

stderr=PIPE)

test.stdin.write(text.encode())

test.stdin.close()

with open("b.txt", 'w') as result:

result.write(test.stdout.read().decode())

运行程序test.py,自动调用和执行程序externProgram.py,在当前文件夹中创建文件b.txt,其中内容为:hello world 董付国

接下来,把程序externProgram.py修改为:

x = input()

print('董付国系列教材:')

for item in x.split():

print('\t',item)

然后把test.py代码修改为:

from subprocess import PIPE, Popen

text = '董付国'

test = Popen('python externProgram.py',

stdin=open('in.txt'),

stdout=open('out.txt', 'w'))

接下来创建文本文件in.txt,内容如下:

《Python程序设计》 《Python程序设计基础》 《Python程序设计》(第2版) 《Python可以这样学》

然后运行程序test.py,自动调用程序externProgram.py并从in.txt文件中读取内容再写入到out.txt文件中,其中内容为:

董付国系列教材:

《Python程序设计》

《Python程序设计基础》

《Python程序设计》(第2版)

《Python可以这样学》

--------------分割线--------------

今日练习题:

假设正则表达式模块re已正确导入,那么表达式re.findall('\d+?', 'abcd1234')的值是什么?

原文发布于微信公众号 - Python小屋(Python_xiaowu)

原文发表时间:2017-06-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏每日一篇技术文章

微信小程序_06 将臃肿的单页js文件拆开

小程序中每一个页面对应一个Page()方法,我们需要把变量和组件的各种事件都写在一个对象里,然后把对象作为这个参数传递给Page方法

12120
来自专栏Flutter入门

Vue 绑定简单分析实现

使用js es6 中 Object.defineProperty为我们自己定义的VM创建示例。同时这个方法通过提供了set.get方法的触发我们的监听事件。

15810
来自专栏轮子工厂

课后习题答案

这个是一个很经典的 C 语言入门编程题,可以通过刚刚所讲的循环嵌套来实现,如果将每个表达式看成 i * j,那么第一行是 i = 1,j <= i,第二行是i ...

19410
来自专栏繁花云

12-01-js深入学习

问题表现是:httpd服务器已经开启了,端口也已经监听了,但是就是无法访问

7300
来自专栏十月梦想

Vue组件参数校验和props特性

其实我们可以在组件中把这个props换成一个对象,看到上述代码,type可以为一个数组,来判断这个传递的数据的类型,不符合则报错,required表示这个参数必...

23610
来自专栏搞前端的李蚊子

echarts图表里label文字过长换行的方法

在做一些图标时,有时会出现显示文字过长的问题,需要将其按照指定的字数换行,像下图这样 ? 而echarts没有提供换行的方法,但是可以使用fomatter方法进...

37970
来自专栏一个小程序员的成长笔记

HTML5中引入的关键特性

新特性描述 accesskey 定义通过键盘访问元素的快捷键 contenteditable 该特性设置为true时,浏览器应该允许用户编辑元素的内容...

30290
来自专栏极客编程

mootools入门

MooTools是一个简洁,模块化,面向对象的开源JavaScript web应用框架。

11720
来自专栏柠檬先生

jquery mobile 移动web(5)

有序列表   <div data-role="content">     <ol data-role="listview" data-theme="...

22150
来自专栏iOSer成长记录

iOS-自定义TextField(解决输入限制,键盘弹出问题)

16520

扫码关注云+社区

领取腾讯云代金券