python如何实现管道编程

Python014

python如何实现管道编程,第1张

管道调用子程序

我们想在程序中使用一个子程序,但是需要动态的传递参数(这里说的动态,是指根据上次子程序输入的结果来决定这次输入什么),怎么办呢,不用慌,有subprocess!

下文我先介绍一个例子代码,以及他的输出结果!

1.#!/usr/bin/python2.from subprocess import *3.# Subprocess management,可以做很多子进程的文件,我们要引入这个文件4.p = Popen(["cat", "-n"], bufsize=1024,stdin=PIPE, 5.stdout=PIPE, close_fds=True)6.# 打开程序第一个参数是一个列表(程序名称,参数)7.# 第二个参数是缓冲区大小8.# stdin,stdout是设置是否打开这些管道,如果他的值是subprocess.PIPE的话,9.# 就会打开,同stdin一样的还有stderr10.# close_fds设置为true(unix-only)所有的文件描述符除了(0,1,2)在子程序执行前都会关闭11.(fin, fout) = (p.stdin, p.stdout)12.for i in range(10): # 你会懂的^_^ 13.fin.write("line" + str(i)) 14.fin.write('\n') 15.fin.flush() 16.print fout.readline()

他的输出结果是:1.line02.line13.line24.line35.line46.line57.line68.line79.line810.line9

17.1 subprocess

这个模块允许你产生子线程,连接他们(主线成,和产生的子线程)之间的输入/输出/错误 管道(pipes,管道是一种把两个进程之间的标准输入和标准输出连接起来的机制,从而提供一种让多个进程间通信的方法)。这个模块想要替换一些比较旧的模块和方法:

17.1.1 使用subprocess

在使用subprocess时推荐调用以下几个方来完成你的需求。如果有更高级的情况,可以使用Popen接口。

根据args参数运行命令,等待命令执行结束,返回进程返回值

根据args参数运行命令,等待命令执行结束,如果进程返回值为0则返回(return),否则会raise一个CalledProcessError错误,CalledProcessError类的returncode属性会包含进程返回值。

subprocess.check_output( args , * , stdin=None , stderr=None , shell=False , universal_newlines=False )

正在更新....