模拟:
echo foo |firstCommand - | somePythonRoutine - |secondCommand - | anotherPythonRoutine - |thirdCommand - > finalOutput
您当前使用线程的方法有效:
from subprocess import Popen, PIPEfirst = Popen(["firstCommand", "-"], stdin=PIPE, stdout=PIPE, bufsize=1)second = Popen(["secondCommand", "-"], stdin=PIPE, stdout=PIPE, bufsize=1)bind(first.stdout, second.stdin, somePythonRoutine)with open("finalOutput", "wb") as file: third = Popen(["thirdCommand", "-"], stdin=PIPE, stdout=file, bufsize=1)bind(second.stdout, third.stdin, anotherPythonRoutine)# provide input for the pipelinefirst.stdin.write(b"foo")first.stdin.close()# wait for it to completepipestatus = [p.wait() for p in [first, second, third]]
每个都
bind()启动一个新线程:
from threading import Threaddef bind(input_pipe, output_pipe, line_filter): def f(): try: for line in iter(input_pipe.readline, b''): line = line_filter(line) if line: output_pipe.write(line) # no flush unless newline present finally: try: output_pipe.close() finally: input_pipe.close() t = Thread(target=f) t.daemon = True # die if the program exits t.start()
和
somePythonRoutine,
anotherPythonRoutine接受一行并返回(可能已修改)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)