如何使os.mkfifo和subprocess.Popen一起工作?

时间:2010-01-20 10:22:45

标签: python subprocess patch fifo

我正在尝试使用命名管道重定向修补程序命令输出。我试过这样:

fifo = os.path.join(self.path, 'pipe')
os.mkfifo(fifo)
op = os.popen('cat '+ fifo)
proc = Popen(['patch', current_keyframe, '--input='+fpath, '--output='+fifo], stdin=PIPE, stdout=PIPE)
os.unlink(fifo)
print op.read()

但我的脚本停在 Popen()调用,就像 patch 命令没有完成一样。我怎样才能使它正常工作?

1 个答案:

答案 0 :(得分:1)

在从fifo读取之前,您不是在等待patch命令完成。将subprocess.Popen()调用替换为subprocess.call(),并删除未使用的stdin / stdout重定向。另外,使用open(fifo)来读取fifo,而不是os.popen('cat ' + fifo)

我希望你能完全避开FIFO吗?在p = Popen(['patch', '--input', fpath], stdout=PIPE)之后,您可以从p.stdout读取补丁的输出。