Нет, вам не нужно закрывать p2.stdin
. На самом деле вы не можете, потому что это Ни один.
Это потому, что stdin=p1.stdout
, тогда как объект потока Python создается только если stdin=subprocess.PIPE
. См. подпроцесс Popen.stdin docs )
Я написал тестовую программу (Python 3), которая заканчивается на BrokenPipeError
, если CLOSE_P1 = True
, но вращается вечно ?? если CLOSE_P1 = False
:
from subprocess import Popen, PIPE
CLOSE_P1 = True
p1 = Popen("ffmpeg "
"-f rawvideo -pixel_format rgb24 -video_size 1x1 -i - "
"-c copy -f rawvideo -".split(), stdin=PIPE, stdout=PIPE)
p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
assert p2.stdin is None
if CLOSE_P1:
p1.stdout.close() # Allow p1 to receive a SIGPIPE if p2 exits.
p2.terminate()
while 1:
p1.stdin.write(b'fsdafhdsf9jd9s8ha0')