[pyar] Lidiando con el límite de file descriptors abiertos y subprocess

Andrés Gattinoni andresgattinoni en gmail.com
Mar Ago 23 11:07:54 ART 2011


2011/8/23 QliX=D! [aka EHB] <qlixed en gmail.com>:
> 2011/8/23 Andrés Gattinoni <andresgattinoni en gmail.com>
> Yo tocaria el popen asi:
> p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
> stderr=subprocess.STDOUT, close_fds=True)
>
> Si estas en windows no uses close_fds.
> Con eso Juntas stdout y stderr con lo que reducis a la mitad los pipe usados.
> La otra que te queda es usar un archivo unico para las salidas:
>
> f= subprocess.Popen(cmd, stdout=fileobject,  stderr=subprocess.STDOUT,
> close_fds=True)
>
> Entonces todas las salidas te quedan en el fileobject.
>
> Otra idea, un poco mas piola me parece, es hacer una ejecucion doble
> en caso de error, como es esto?:
> 1. Ejecutas un popen con stdout=None, stderr=None.
> 2. Analizas el p.returncode
>  2.1. Si dio error entonces ejecutas un popen con los pipes o el fileobject.
>  2.2. Obtenes el stdout y lo mostras (o acumulas para mostrar dps).
>
> Esto hace dos ejecuciones de popen, pero solo en caso de que el
> archivo contenga errores.
> Con eso creo que minimizas al maximo los FDs.

Muchas gracias por las sugerencias! Lo voy a probar!



More information about the pyar mailing list