Код Python зависает при использовании подпроцесса с большим количеством выходных данных в стандартный вывод - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть подпроцесс, который может выводить много данных на стандартный вывод.Когда генерируется слишком много данных, это приводит к зависанию подпроцесса, поскольку он ожидает очистки буфера stdout.

Вот небольшой пример ниже ...

test.py

#!/usr/local/bin/python2.7

# test.py

import subprocess

proc = subprocess.Popen(["python","./_ping_con.py"], stdout = subp.PIPE)

while proc.poll() is None:
    pass

print proc.stdout.read()

... и подпроцесс:

#!/usr/local/bin/python2.7

# _ping_con.py

print(96000 * "*")   # Hangs here because it's too much data for the stdout pipe

Что я хотел бы знать, может ли этот буфер быть расширен для обработки большего количества данных?Если нет, могу ли я отправлять свои данные другим способом, чтобы избежать этой проблемы?ИЛИ в основном процессе, есть ли способ узнать, заполнен ли буфер stdout и выполнить чтение?

1 Ответ

0 голосов
/ 23 апреля 2019

Я закончил тем, что записал все свои выходные данные во временный файл, а затем передал имя файла родителю. Работает очень хорошо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...