【问题标题】:How to make os.mkfifo and subprocess.Popen work together?如何让 os.mkfifo 和 subprocess.Popen 一起工作?
【发布时间】:2010-01-20 10:22:44
【问题描述】:

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

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 命令没有完成一样。我怎样才能让它正常工作?

【问题讨论】:

    标签: python subprocess patch fifo


    【解决方案1】:

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

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

    【讨论】:

    • patch 命令不会将其结果返回到标准输出,这就是问题所在。不过谢谢,我会试试的。
    • 对,补丁的默认值是替换你正在修补的文件。如果你说--output=- 补丁非常有帮助,回复patch: **** can't output patches to standard output
    • 嗯,这里我认为补丁很有用。 (我会在原帖中把鸡蛋留在脸上:)
    猜你喜欢
    • 1970-01-01
    • 2015-10-01
    • 2017-06-11
    • 2014-01-12
    • 2020-11-03
    • 2011-03-08
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多