Python 如何使os.mkfifo和subprocess.Popen协同工作?

Python 如何使os.mkfifo和subprocess.Popen协同工作?,python,subprocess,patch,fifo,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() 但我

我正在尝试使用命名管道重定向补丁命令输出。我试着这样做:

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命令没有完成一样。如何使其正常工作?

在读取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读取补丁的输出。

patch命令不会将其结果返回给stdout,这就是问题所在。但是谢谢,我会试试。好的,默认的补丁是替换你正在修补的文件。如果您说
--output=-
patch非常有帮助地回答
patch:***无法将补丁输出到标准输出
.Hm,在这里我认为补丁很有用。(我会把鸡蛋留在原来的帖子里:)