これは、昨日急いで閉じたこの質問のフォローアップです
標準入力から読み取る2番目のプロセスと一緒にパイプされた2つのPythonプロセスがあります。フィーダー プロセス (出力を stdout に書き込む) が停止する (たとえば、強制終了される) と、他の人が示唆したように、以下のコードが例外を生成すると予想しました。
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つの質問:
- フィーダー プロセスが終了したときに例外を取得するようにこのコードを変更することは可能ですか?
- 2番目のプロセス内のフィーダープロセスのプロセスIDをどうにかして見つけることはできますか? つまり、私のパイプが
./step1.py | ./step2.py
step2 内の step1 のプロセス ID を見つけたいとします。試してみos.getppid()
ましたが、step1ではなくstep2を実行するbachプロセスのIDを返します。
ありがとう!