这是我昨天匆忙结束的这个问题的后续行动
我有两个 Python 进程与从 stdin 读取的第二个进程一起传输。当馈线进程(将其输出写入标准输出)停止(例如被杀死)时,我希望下面的代码生成异常,正如其他人所建议的那样:
while True:
try:
l = sys.stdin.readline()
## process l
except Exception, e:
## handle exceptions
except IOError, e:
## handle IO exceptions
if e.errno == errno.EPIPE:
## handle EPIPE exceptions
但是,这不会发生。相反,sys.stdin.readline()
只需返回一个空的l
.
所以2个问题:
- 当馈线进程死亡时,是否可以修改此代码以获取异常?
- 我能以某种方式在第二个进程中找到进料器进程的进程 ID 吗?换句话说,如果我的管道是
./step1.py | ./step2.py
我想在 step2 中找到 step1 的进程 ID。我试过os.getppid()
了,但返回的是运行 step2 的 bach 进程的 id,而不是 step1。
谢谢!