我有一个程序sink.py
,我希望在bash脚本(run.sh
)中运行。 sink.py
需要来自stdin的数据来完成它的工作。
我想将其他程序source.py
的数据提供给sink.py
。以下管道工作正常:
python source.py | python sink.py
但是,我期待exec sink.py
,以便接管shell。我想这样做,因为我从流程管理器(supervisord)启动这个bash脚本,sink.py
具有所有信号处理代码。理想情况下,我可以这样做:
python source.py | exec python sink.py
但这似乎不起作用 - ps
表明run.sh
继续作为sink.py
的父级运行。
我尝试使用像这样的流程替换:
exec python sink.py < <(python source.py)
这几乎是完美的,除了bash脚本似乎变成了一个“僵尸”,这可能不是一件好事:
PID TTY STAT TIME COMMAND
1042 pts/7 S 0:00 python sink.py
1046 pts/7 Z 0:00 [run.sh] <defunct>
另一个想法是将source.py
的输出保存到临时文件中,然后将文件导入sink.py
。这几乎可行,但我无法在exec sink.py
之后删除临时文件。
有没有什么好办法可以做到这一点?