Ниже приведен фрагмент ztui.py, воспроизводящий проблему. Вместо перехода к следующему вводу stdin процесс просто неожиданно завершает работу после печати на stderr, и программа Python получает ошибку BrokenPipeError, когда пытается отправить/сбросить третью команду как он явно закрыт.
Код: Выделить всё
from subprocess import Popen, PIPE
proc = Popen(["bc"], stdin=PIPE, stdout=PIPE, stderr=PIPE)
proc.stdin.write(b"2+2\n")
proc.stdin.flush()
print(proc.stdout.readline().decode())
proc.stdin.write(b"len()\n")
proc.stdin.flush()
print(proc.stdout.readline().decode())
print("stderr ==>", proc.stderr.readlines(2))
# and here the proc exits, checked using ps aux from another terminal window
proc.stdin.write(b"3+3\n")
proc.stdin.flush()
print(proc.stdout.readline().decode())
Код: Выделить всё
fabio: ~/Downloads $ python3.11 --version
Python 3.11.3
fabio: ~/Downloads $ python3.11 ztui.py
4
stderr ==> [b'\n', b'Runtime error: undefined function: len()\n']
Traceback (most recent call last):
File "/Users/fabio/Downloads/ztui.py", line 15, in
proc.stdin.flush()
BrokenPipeError: [Errno 32] Broken pipe
Код: Выделить всё
fabio: ~/Downloads $ bc
>>> 2*2
4
>>> len()
Runtime error: undefined function: len()
0: (main)
>>> 3*3
9
>>> quit
Подробнее здесь: https://stackoverflow.com/questions/793 ... vial-error