0

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

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()调用中停止,就像补丁命令没有完成一样。我怎样才能让它正常工作?

4

1 回答 1

1

在从 fifo 读取之前,您无需等待 patch 命令完成。将subprocess.Popen()调用替换为subprocess.call(),并删除您未使用的标准输入/标准输出重定向。此外,用于open(fifo)从 fifo 读取,而不是os.popen('cat ' + fifo).

我希望你意识到你可以完全避免先进先出?之后p = Popen(['patch', '--input', fpath], stdout=PIPE),您可以从 p.stdout 读取补丁的输出。

于 2010-01-20T10:28:46.767 回答