У меня есть следующий фрагмент кода 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
?
Следует отметить, что мне нужно обрабатывать потоки вывода и ошибок.