【发布时间】:2017-10-19 22:22:48
【问题描述】:
我想使用 Python 的 os.execv 替换我当前的进程,但我也希望新进程将 stdout 发送到另一个进程(收集日志并通过网络发送它们)。收集日志的进程也需要由原Python进程启动。
我猜我需要做一些 fork、dup2、execv 的事情,但我需要一些帮助。
在 bash 中,它可能看起来像这样
#!/bin/bash
exec ./foo ∣ ./bar
【问题讨论】:
-
subprocess模块可以为您执行此操作:gist.github.com/JacobIRR/dced5ce0f19e4f376aaef19d0e80d9d7 -
@JacobIRR 在子进程中运行命令,它不会替换当前进程。
-
次要注意,这并不完全符合您在 Bash 中的想法 - 主进程遵循管道的最后阶段,因此
exec无效。 -
@ephemient 感谢您的澄清。我想这意味着我不确定如何在 Python 和 Bash 中做到这一点!
-
Bash 中最接近的类似物是进程替换,例如
exec ./foo > >(./bar)。
标签: python process pipe fork exec