Определите, читает ли подпроцесс из stdin - PullRequest
2 голосов
/ 03 августа 2020

У меня есть сценарий python, который запускает другие процессы через subprocess.run(...). Обычно такой процесс выполняется автоматически, без чтения из стандартного ввода. Однако в случае ошибки процессы ожидают ввода пользователя. Я хочу обнаружить такую ​​ситуацию из вызывающего python скрипта, а затем, например, убить этот процесс. Как я мог этого добиться?

(Моя идея заключалась в том, чтобы создать файловый объект, который вызывает исключение при вызове его метода .read(), и передать его subprocess.Popen(...) в качестве «приманки» для стандартного ввода-вывода kwarg. Однако это кажется некрасивым, потому что некоторые fileno нужно было подделать.)

1 Ответ

0 голосов
/ 03 августа 2020

Вы можете просто передать пустой файл, например subprocess.DEVNULL. Процесс, ожидающий стандартного ввода, получит сигнал EOF, если он попытается прочитать из такого файла.

...