18 votes

Comment capturer la sortie de la commande "subprocess.call" dans 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 s'il est 0 ou 1, mais si c'est 1, j'aimerais avoir le texte de la commande "Un sous-répertoire ou fichier ben existe déjà." dans un format de fichier, afin de pouvoir le comparer à un autre fichier si je veux m'assurer que le texte est le même.

Est-il possible d'avoir une ligne comme celle-ci, mais je sais que cela ne fonctionne pas

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

ainsi, peu importe ce qui se passe avec la commande, le texte est capturé dans filename, et rval a toujours le code de retour ?

17voto

btubbs Points 440

Le module subprocess dispose d'une fonction 'check_output' intégrée pour faire cela :

In [11]: result = subprocess.check_output(['pwd'])

In [12>: print result
/home/vagrant

15voto

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

12voto

Jatin Kumar Points 2347
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 toute façon, vous devez utiliser try catch car cela lance une exception si le code de retour est différent de zéro :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X