2012-04-20 21 views
25

Para el comando siguiente:Supresión de salida en Python llamada subproceso

subprocess.call(shlex.split(
      """/usr/local/itms/bin/iTMSTransporter -m lookupMetadata 
       -apple_id %s -destination %s"""%(self.apple_id, self.destination)) 

Imprime toda la producción en la ventana de terminal. ¿Cómo suprimiría TODA la producción aquí? Intenté hacer subprocess.call(shlex.split(<command> > /dev/null 2&1)), pero no produjo los resultados requeridos. ¿Cómo haría esto aquí?

Respuesta

35

Puede utilizar los parámetros stdout= y stderr=subprocess.call() a dirigir stdout o stderr a un descriptor de archivo de su elección. Así que tal vez algo como esto:

import os 

devnull = open(os.devnull, 'w') 
subprocess.call(shlex.split(
    '/usr/local/itms/bin/iTMSTransporter -m lookupMetadata ' 
    '-apple_id %s -destination %s' % (self,apple_id, self.destination)), 
    stdout=devnull, stderr=devnull) 

Usando subprocess.PIPE, si usted no está leyendo de la tubería, podría hacer que el programa para bloquear si se genera una gran cantidad de la producción.

+27

puede simplemente usar os.devnull –

+3

Oye mira, aprendí algo. – larsks

+1

¿Cómo utiliza exactamente os.devnull para mejorar esta respuesta? Para mí eso es solo la cadena '/ dev/null', que no es exactamente el tipo de mejora que garantiza 10 votos ascendentes. – RussellStewart

2

Lo que funcionó para mí es agregar 2>/dev/null al final del comando.

+0

Para futuros lectores: no se garantiza que este enfoque funcione en todas las plataformas/shells, aunque probablemente funcione en cualquier elemento reciente y POSIX-y. –

+0

(también, esto solo funciona con 'shell = True', que desea evitar cuando sea posible) – larsks

Cuestiones relacionadas