¿Alternativas ás limitacións de memoria Python Popen.communicate ()?

Teño o seguinte anaco de código Python (executando v2.7) que resulta en MemoryError excepcións que se lanzan cando traballo con ficheiros grandes (varios GB):

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

Ao ler a documentación a ] Popen.communicate () , parece que se está producindo un búfer:

Nota Os datos lidos almacénanse na memoria, polo que non use este método se o tamaño dos datos é grande ou ilimitado.

¿Hai algún xeito de desactivar este búfer ou forzar a limpeza caché periódicamente mentres se executa o proceso?

Que enfoque alternativo debo usar en Python para executar un comando que transmita xigabytes de datos a stdout ?

Debo ter en conta que teño que xestionar fluxos de saída e erro.

19
задан Alex Reynolds 30 July 2011 в 00:09
поделиться