Python Popen ожидание / выполнение опроса блокировки - PullRequest
0 голосов
/ 06 декабря 2018

Мне нужно выполнить exe-файл с аргументами, который читает файл, делает некоторые вычисления и генерирует 3 новых файла.Использование subprocess.Popen работает нормально.Но чтобы проверить его выполнение, я использую wait().Но когда используется wait(), процесс не работает и файлы не создаются.Я даже проверил в диспетчере задач.Обычно процесс занимает 5 секунд, но если используется wait(), процесс завершается в течение секунды.Кто-нибудь может мне помочь?

process = subprocess.Popen(span_command, shell=True)

Приведенный выше фрагмент кода при использовании отдельно работает нормально, но если используется с process.wait(), процесс останавливается.

1 Ответ

0 голосов
/ 07 декабря 2018

Требуется больше информации о выполненной программе.

Я думаю, что ваша программа заканчивается, когда она stdin закрыта.

Например, date в Windows ожидает ввода и завершает работу при получении какого-либо ввода.

p2 = subprocess.Popen(["date"], stdout=subprocess.PIPE ,shell=True)
print(p2.returncode)
time.sleep(10)
print(p2.returncode)
print(p2.wait())
print(p2.returncode)

Это может быть решением для вас.Подождите некоторое время, прежде чем вызвать wait.

Но было бы лучше узнать, как эта программа реагирует на разные входы и работает с stdin=subprocess.PIPE и p2.communicate("some expected input").

Проверьте вывод программывы работаете.

p2 = subprocess.Popen(["date"], stdout=subprocess.PIPE, stderr=subprocess.PIPE ,shell=True)
print(p2.wait())
print(p2.stdout.readlines())
print(p2.stderr.readlines())

Это не решение, это процесс отладки.

Нет причин не работать с кодом, который вы дали.Так что это то, что вы не показали нам.Первый подозреваемый - программа, которую вы запускаете.

...