После запуска подпроцесса с использованием библиотеки Python subprocess
я использую stderr
для передачи сообщения от дочернего процесса к родительскому процессу, содержащему некоторые сериализованные данные. Затем я хочу, чтобы родитель возвратил (через stdin
) результат функции, примененной к этим данным.
По сути, у меня внутри подпроцесса есть функция, которая делает что-то вроде этого:
sys.stderr.write("some stuff to write")
# some time later
some_var = sys.stdin.read()
Однако, это завершает блокировки родительского элемента в ожидании ввода stderr
, поэтому я попытался вызвать:
sys.stderr.flush()
os.fsync(sys.stderr.fileno())
Однако это не работает. Ничего после os.fsync
не выполняется. Кроме того, когда я вызываю proc.poll()
в родительском процессе, получается, что дочерний код возврата равен 1.
Что я могу сделать, чтобы предотвратить это? Должен ли я рассмотреть другой подход?