73 votes

python getoutput() équivalent dans le sous-processus

Je souhaite obtenir la sortie de certaines commandes shell telles que ls ou df dans un script python. Je vois que commands.getoutput('ls') est obsolète mais subprocess.call('ls') ne m'obtiendra que le code de retour.

J'espère qu'il existe une solution simple.

105voto

Michael Smith Points 1717

Utilisez subprocess.Popen :

 import subprocess
process = subprocess.Popen(['ls', '-a'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = process.communicate()
print(out)

Notez que la communication se bloque jusqu'à la fin du processus. Vous pouvez utiliser process.stdout.readline() si vous avez besoin de la sortie avant qu'elle ne se termine. Pour plus d'informations, consultez la documentation .

52voto

knite Points 901

Pour Python >= 2.7, utilisez subprocess.check_output() .

http://docs.python.org/2/library/subprocess.html#subprocess.check_output

7voto

Roi Danton Points 1602

Pour détecter les erreurs avec subprocess.check_output() , vous pouvez utiliser CalledProcessError . Si vous souhaitez utiliser la sortie sous forme de chaîne, décodez-la à partir du bytecode.

 # \return String of the output, stripped from whitespace at right side; or None on failure.
def runls():
    import subprocess
    try:
        byteOutput = subprocess.check_output(['ls', '-a'], timeout=2)
        return byteOutput.decode('UTF-8').rstrip()
    except subprocess.CalledProcessError as e:
        print("Error in ls -a:\n", e.output)
        return None

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