Popen.communicate ()
Popen.communicate ( input=None, timeout=None )
Взаимодействие с процессом: отправка данных на стандартный ввод stdin. Читает данные из stdout и stderr, пока не будет достигнут конец файла. Подождите, пока процесс завершится, и установится атрибут returncode. Необязательный аргумент input должен быть данными для отправки дочернему процессу или None
, если данные не должны отправляться дочернему процессу. Если потоки были открыты в текстовом режиме, input должен быть строкой. В противном случае это должны быть байты.
communicate () возвращает кортеж (stdout_data, stderr_data)
. Данные будут строками, если потоки открывались в текстовом режиме; в противном случае байты.
Обратите внимание: если вы хотите отправлять данные на стандартный ввод процесса stdin, вам необходимо создать объект Popen с помощью stdin = PIPE
. Точно так же, чтобы получить в результирующем кортеже что-либо, кроме None
, вам также необходимо указать stdout = PIPE
и / или stderr = PIPE
.
Если процесс не завершится по истечении timeout секунд ожидания, будет возбуждено исключение TimeoutExpired. Перехват этого исключения и повторная попытка связи не приведет к потере вывода.
Дочерний процесс не уничтожается, если истекает timeout, поэтому для правильной очистки приложение с хорошим поведением должно убить дочерний процесс и завершить обмен данными:
proc = subprocess.Popen(...)
try:
outs, errs = proc.communicate(timeout=15)
except TimeoutExpired:
proc.kill()
outs, errs = proc.communicate()
Изменено в версии 3.3: добавлен timeout.
Last updated
Was this helpful?