Редактировать: Если вам нужен поток, вы можете попробовать создать файлоподобный объект и передать его в 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
?
Я должен отметить, что мне нужно обрабатывать потоки вывода и ошибок.