¿Cómo capturar la salida de “subprocess.call” a un archivo?

En mi código tengo una línea similar a esta:

rval = subprocess.call(["mkdir",directoryName], shell=True) 

y puedo verificar rval para ver si es 0 o 1 , pero si es 1 , me gustaría tener el texto del comando "A subdirectory or file ben already exists." en un formato de archivo, así que puedo compararlo con otro archivo si quiero asegurarme de que el texto sea el mismo.

¿Es posible tener una línea como esta, pero sé que esto no funciona?

 rval = subprocess.call(["mkdir",directoryName], shell=True) >> filename 

así que no importa lo que pase con el comando, el texto se captura en filename de filename , y rval aún tiene el código de retorno.

 import subprocess f = open(r'c:\temp\temp.txt','w') subprocess.call(['dir', r'c:\temp'], shell=True, stdout=f) f.close() 

El módulo de subproceso tiene una función ‘check_output’ integrada para hacer esto:

 In [11]: result = subprocess.check_output(['pwd']) In [12]: print result /home/vagrant 
 import subprocess try: result = subprocess.check_output(['dir', r'c:\temp'], shell=True) print result except subprocess.CalledProcessError as e: return_code = e.returncode 

De todos modos, debe usar la captura de prueba porque genera una excepción si el código de retorno no es cero 🙂