stdout, stderr y return code

Jose Caballero jcaballero.hep en gmail.com
Vie Mayo 8 14:36:07 CEST 2009


El 8 de mayo de 2009 5:21, Arnau Sanchez <pyarnau en gmail.com> escribió:

> Jose Caballero wrote:
>
> > def comando(cmd):
> >         err = ''
> >         rc, out = commands.getstatusoutput(cmd +' 2> /dev/null')
> >         if rc != 0:
> >                 err = commands.getoutput(cmd +' 1> /dev/null')
> >
> >         return out, err, rc
>
> Hay cosas que se pueden hacer y cosas que *no* se pueden hacer. Éste código
> pertenece al segundo grupo :-)
>
> popen2.Popen3 no es muy difícil de usar:
>
> import popen2
> popen = popen2.Popen3("ls /etc/services noexiste", capturestderr=True)
> stdout = popen.fromchild.read()
> stderr = popen.childerr.read()
> retcode = popen.wait() >> 8
>
>
> http://www.python.org/doc/2.5.2/lib/module-popen2.html
>
> http://www.python.org/doc/2.5.2/lib/popen3-objects.html
>
> http://www.python.org/doc/2.5.2/lib/os-process.html#os-process
>
>


Hola Arnau,

estaba bromeando con el codigo. Claro que no se debe hacer. Por varios
motivos:
a) puede la ejecucion no sea igual en el segundo intento, con lo que ya no
habria correlacion entre las tres variables que quiero obtener
b) en el mejor caso, estoy duplicando el tiempo de ejecucion
c) en el peor, forzar la ejecucion de un comando que ya ha fallado puede ser
catastrofico.

Acabo de probar el ejemplo. Funciona bien, incluso con 2.3 (que es la
version que yo uso).

Muchisimas gracias.
Jose
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es