К сожалению, не существует стандартного способа соединения вашего собственного стандартного ввода со стандартным вводом какого-либо другого процесса на время этого процесса, кроме чтения с собственного стандартного ввода и записи в этот процесс, если вы выбрали запись в этот процесс.во-первых.
То есть вы можете сделать это:
proc = subprocess.Popen(...) # no stdin=
и процесс унаследует ваш stdin;или вы можете сделать это:
proc = subprocess.Popen(..., stdin=subprocess.PIPE, ...)
и затем вы предоставите стандартный ввод для этого процесса.Но как только вы выбрали любой его стандартного ввода, вы предоставите все его стандартного ввода, даже если это означает, что вы должны прочитать свой собственный стандартный ввод.
Linuxпредлагает системный вызов splice
(документация на man7.org , документация на linux.die.net , Википедия , linux pipe данные из файладескриптор в fifo ), но вам лучше всего использовать фоновый поток для копирования данных.