Comment faire pour capturer la sortie de “sous-processus.l'appel” pour un fichier?
Dans mon code j'ai une ligne similaire à ceci:
rval = subprocess.call(["mkdir",directoryName], shell=True)
et je peux vérifier rval
pour voir si c'est 0
ou 1
, mais si c'est 1
, j'aimerais avoir le texte de la commande "A subdirectory or file ben already exists."
dans un format de fichier, je peux le comparer à un autre fichier si je veux assurez-vous que le texte est le même.
Est-il possible d'avoir une ligne comme ceci, mais je sais que cela ne fonctionne pas
rval = subprocess.call(["mkdir",directoryName], shell=True) >> filename
donc, peu importe ce qui se passe avec la commande, le texte est saisi en filename
, et rval
a encore le code de retour?
Duplicata de tous ceux-ci: stackoverflow.com/search?q=%5Bpython%5D+subprocess+capture
double possible de Capture de sous-processus de sortie
pourquoi n'êtes-vous pas à l'aide de Python builtin
Je suis en train de faire ce pour une commande je ne peux pas poster ici, mais il a des caractéristiques similaires à celles mkdir.
c'est presque un duplicata. La différence serait
double possible de Capture de sous-processus de sortie
pourquoi n'êtes-vous pas à l'aide de Python builtin
mkdir()
?Je suis en train de faire ce pour une commande je ne peux pas poster ici, mais il a des caractéristiques similaires à celles mkdir.
c'est presque un duplicata. La différence serait
Popen
vs call
(qui je suis d'accord, c'est subtil), et le désir d'écrire dans un fichier plutôt que de capturer la sortie du programme. Même s'il semble que l'interlocuteur serait plutôt la capture de la sortie, il est utile de répondre à la question telle qu'elle est.OriginalL'auteur Dag | 2010-10-20
Vous devez vous connecter pour publier un commentaire.
deux raisons: d'abord, il a été inclus dans la question d'origine, la deuxième j'ai été en utilisant Windows shell de commande pour les tests.
OriginalL'auteur
Le sous-processus module est intégré dans le 'check_output la fonction pour le faire:
Lorsque j'ai besoin des deux, j'utilise l'envoyé de paquet: github.com/kennethreitz/envoy
Notez que check_output n'est possible que depuis la 2.7
OriginalL'auteur
Toute façon, vous devez utiliser try catch, car il lève une exception si le code de retour est non nul 🙂
except CalledProcessError as e: returncode=e.returncode
.OriginalL'auteur