Редактировать: Если вам нужен поток, вы можете попробовать создать файлоподобный объект и передать его в stdout и stderr. (Я не пробовал, однако.) Затем вы могли бы читать (запрашивать) из объекта, как он пишется.

я есть следующий кусок кода Python (работает v2.7), который приводит кMemoryError исключения, возникающие при работе с большими (несколько ГБ) файлами:

myProcess = Popen(myCmd, shell=True, stdout=PIPE, stderr=PIPE)
myStdout, myStderr = myProcess.communicate()
sys.stdout.write(myStdout)
if myStderr:
    sys.stderr.write(myStderr)

В чтениидокументация дляPopen.communicate()похоже, что происходит некоторая буферизация:

Запись Считанные данные буферизируются в памяти, поэтому не используйте этот метод, если размер данных большой или неограниченный.

Есть ли способ отключить эту буферизацию или принудительно периодически очищать кеш во время выполнения процесса?

Какой альтернативный подход я должен использовать в Python для запуска команды, которая направляет гигабайты данных вstdout?

Я должен отметить, что мне нужно обрабатывать потоки вывода и ошибок.

Ответы на вопрос(2)

Ваш ответ на вопрос