Ответ 1
Оба wait()
(с указанным timeout
) и poll()
return None
, если процесс еще не завершен, и что-то другое, если процесс завершился (я думаю, что целое число, код выхода, надеюсь, 0).
Изменить:
wait()
и poll()
имеют различное поведение:
-
wait
(без аргумента таймаута) блокирует и ждет завершения процесса. -
wait
с аргументом timeout будет ждатьtimeout
секунд для завершения процесса. Если он не будет завершен, он выкинет исключениеTimeoutExpired
. Если вы поймаете исключение, вам будет предложено продолжить или сноваwait
. -
poll
всегда возвращается немедленно. Он эффективно выполняет ожидание с тайм-аутом 0, ловит любое исключение и возвращаетNone
, если процесс не завершился. - При использовании
wait
илиpoll
, если процесс завершится, будет установлен popen-объектreturncode
(в противном случае it None - вы можете проверить это так же легко, как вызовwait
илиpoll
), а возвращаемое значение из функции также будет кодом возврата процесса.
</Правкa >
Итак, я думаю, вы должны сделать что-то вроде:
while myprocess.poll() is None:
print("Still working...")
# sleep a while
Имейте в виду, что если bash script создает много выходных данных, вы должны использовать communicate()
или что-то подобное, чтобы предотвратить добавление stdout или stderr.