Вопрос по linux, python – Popen.communicate () выдает OSError: «[Errno 10] Нет дочерних процессов»

8

Я пытаюсь запустить дочерний процесс и получить его вывод на Linux из Python с помощью модуля подпроцесса:

#!/usr/bin/python2.4
import subprocess

p = subprocess.Popen(['ls', '-l', '/etc'],
                   stdout=subprocess.PIPE,
                   stderr=subprocess.PIPE)
out, err = p.communicate()

Тем не менее, я испытываю некоторую слабость: иногда p.communicate ()

OSError: [Errno 10] No child processes

Что может вызвать это исключение? Есть ли здесь какой-либо недетерминизм или расовые условия, которые могут вызвать вялость?

Какую версию Python вы используете? Это хорошо работает для меня, если я достану «extra_args» sqram

Ваш Ответ

4   ответа
0

используя Python 2.6.4, который я встроил в свой домашний каталог (потому что я не хочу обновлять «встроенный» Python на компьютере).

Я обошел это, заменивsubprocess.Popen() с (устарело)os.popen3().

3
По состоянию на 2010-09-29 ошибка по-прежнему помечена как "open / needs patch". и влияет на версии 3.2, 3.1, 2.7, 2.6.
Если это ошибка, подумайте об обновлении вашего питона до 2.5 / 2.6. Это было решено.
6

ботать так, как ожидалось, поскольку он полагается на собственный обработчик этого сигнала.

Вы можете проверить обработчики SIGCHLD, закомментировав вызов Popen и затем выполнив:

strace python <your_script.py> | grep SIGCHLD

если вы видите что-то похожее на:

rt_sigaction(SIGCHLD, ...)

тогда у вас проблемы. Вам нужно отключить обработчик перед вызовом Popen, а затем сбросить его после завершения связи (это может привести к условиям гонки, так что будьте осторожны).

signal.signal(SIGCHLD, handler)
...
signal.signal(SIGCHLD, signal.SIG_DFL)
'''
now you can go wild with Popen. 
WARNING!!! during this time no signals will be delivered to handler
'''
...
signal.signal(SIGCHLD, handler)

Об этом сообщают об ошибке Python, и, насколько я понимаю, она еще не устранена:

http://bugs.python.org/issue9127

Надеюсь, это поможет.

Вот список выпусков, которые решают эти проблемыbugs.python.org/issue1731717#msg260457
Приветbugs.python.org/issue9127 посетил ссылку, но не смог выяснить, в каком выпуске Python проблема устранена. Можете ли вы помочь мне с тем же.
Представленное выше сообщение и ссылка, по-видимому, не являются правильными, поскольку в соответствии с версиями, в которых обнаружена ошибка, Python 3.1, Python 3.2, Python 2.7, Python 2.6 упоминаются эти версии Python, в которых обнаружена ошибка.
0

работает скрипт? Как часто это происходит?

Похожие вопросы