«Нет дочерних процессов» на os.waitpid - PullRequest
2 голосов
/ 08 июля 2011

Я пытаюсь смоделировать поведение os.system с Popen и waitpid в Ubuntu, и я получаю

OSError: [Errno 10] No child processes

вот как я его использую

p = Popen(args, stdout = PIPE, stderr = PIPE)
stdout, stderr = p.communicate()
returncode = os.waitpid(p.pid, 0)[1]

Я пытался получить код возврата из p.returncode, но это всегда None, есть идеи, как получить код возврата?

Ответы [ 2 ]

6 голосов
/ 08 июля 2011

communicate уже ожидает завершения дочернего процесса и собирает сам код возврата.Поэтому, когда вы вызываете os.waitpid, вы вызываете его, ссылаясь на идентификатор процесса, который уже был удален из таблиц ОС.Таким образом вы получаете ошибку «Нет дочернего процесса».

Необходимый код возврата будет сохранен в поле код возврата объекта процесса после возврата communicate.

3 голосов
/ 08 июля 2011

Используйте p.poll() или p.wait().

...