8
votes

Python: Obtenez la sortie d'une ligne de commande qui quitte le code de sortie non zéro.

J'utilise Python 2.7.1 sur une boîte de Server Windows Server 2008 R2 X64.

J'essaie d'obtenir la sortie d'un processus de ligne de commande qui donne un statut de sortie non zéro après la sortie Les informations dont j'ai besoin.

J'avais initialement à l'origine de sous-processus.check_output et attrape l'appeléProcessError qui se produit avec le statut de sortie non nul, mais pendant que le code retour a été stocké dans l'erreur, aucune sortie révélé cela.

en cours d'exécution contre les cas qui donnent une sortie, mais ont un statut de sortie de 0 fonctionner correctement et je peux obtenir la sortie à l'aide de sous-processus.Check_output.

Mon hypothèse était que la sortie était écrite à stdout mais l'exception tire sa "sortie" de stardr. J'ai essayé de réaliser la mise en œuvre de la fonctionnalité de check_output, mais je n'obtiens toujours rien sur la sortie quand je crois que je devrais voir la sortie à STDOUT et STDERR. Mon code actuel est ci-dessous (où 'Commande' est le texte intégral, y compris les paramètres de commande, je suis en cours d'exécution: xxx

Cela me donne les éléments suivants dans la sortie variable: < Code> [(((((('', aucune)]

est mon sous-processus.popen code correct?


2 commentaires

Après .Communicate () , vous pouvez utiliser processus.returncode directement au lieu de processus.poll () .


Comment obtenir une sortie de la commande de commande avec Python: Stackoverflow.com/a/20456745/445131


3 Réponses :


1
votes

Il y a un problème ici qui pourrait vous frapper http://bugs.python.org/issue9905


0 commentaires

10
votes

Votre code fonctionne bien. Il s'avère que le processus que vous appelez est probablement émis à CON. Voir l'exemple suivant

subprocess -> 
native -> ('', None)
stderr subproces CalledProcessError.output = stdout
native CalledProcessError.output = stderr stdout


1 commentaires

Je suis sûr que c'est là que ça va. J'ai été capable de contacter le vendeur et de découvrir des paramètres non documentés supplémentaires qui stropment les statuts de sortie non zéro survenus. Mon script fonctionne maintenant, bien que je voudrais toujours savoir comment capturer la production de con.



3
votes

Avez-vous essayé starr = subprocess.stdout comme mentionné dans la page Python Doc:

Pour également capturer une erreur standard dans le résultat, utilisez stardr = subprocess.spedout:

Voici un code de test: xxx

sortie: xxx


0 commentaires