У меня есть следующий фрагмент кода Python (работает v2.7), в результате которого MemoryError
исключаются исключения, когда я работаю с большими (несколькими GB) файлами:
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
?
Я должен отметить, что мне нужно обрабатывать выходные и потоки ошибок.