我正在尝试使用命名管道重定向修补程序命令输出。我试过这样:
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 命令没有完成一样。我怎样才能使它正常工作?
答案 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读取补丁的输出。