Pour la commande suivante:
subprocess.call(shlex.split(
"""/usr/local/itms/bin/iTMSTransporter -m lookupMetadata
-Apple_id %s -destination %s"""%(self.Apple_id, self.destination))
Il imprime la sortie entière dans la fenêtre Terminal. Comment supprimer toutes les sorties ici? J'ai essayé de faire subprocess.call(shlex.split(<command> > /dev/null 2&1
)), mais cela n'a pas produit les résultats requis. Comment pourrais-je faire cela ici?
Vous pouvez utiliser les paramètres stdout=
Et stderr=
Pour subprocess.call()
pour diriger stdout
ou stderr
vers un descripteur de fichier de votre choix. Alors peut-être quelque chose comme ça:
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)
L'utilisation de subprocess.PIPE
, Si vous ne lisez pas dans le tube, pourrait bloquer votre programme s'il génère beaucoup de sortie.
Mise à jour
Comme @yanlend le mentionne dans un commentaire, les nouvelles versions (3.x) de Python incluent subprocess.DEVNULL
Pour résoudre ce problème de manière plus pratique et portable. Dans ce cas, le le code ressemblerait à:
subprocess.call(shlex.split(
'/usr/local/itms/bin/iTMSTransporter -m lookupMetadata '
'-Apple_id %s -destination %s' % (self,Apple_id, self.destination)),
stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
Ce qui a fonctionné pour moi, c'est d'ajouter 2>/dev/null
à la fin de la commande.