web-dev-qa-db-fra.com

Comment puis-je obtenir la sortie du terminal en python?

Je peux exécuter une commande de terminal à l'aide de os.system() mais je veux capturer le résultat de cette commande. Comment puis-je faire ceci?

21
AssemblerGuy
>>> import subprocess
>>> cmd = [ 'echo', 'arg1', 'arg2' ]
>>> output = subprocess.Popen( cmd, stdout=subprocess.PIPE ).communicate()[0]
>>> print output
arg1 arg2

>>> 

Il y a un bogue dans l'utilisation du sous-processus.PIPE. Pour l'énorme sortie, utilisez ceci:

import subprocess
import tempfile

with tempfile.TemporaryFile() as tempf:
    proc = subprocess.Popen(['echo', 'a', 'b'], stdout=tempf)
    proc.wait()
    tempf.seek(0)
    print tempf.read()
38
Jiří Polcar

Utilisez plutôt le module subprocess .

pipe = Popen("pwd", Shell=True, stdout=PIPE).stdout
output = pipe.read()

En Python 2.7, vous pouvez également utiliser la fonction check_output() .

16
Sven Marnach

Vous pouvez utiliser Popen in subprocess comme ils le suggèrent.

avec os, ce qui n'est pas recommandé, c'est comme ci-dessous: 

import os
a  = os.popen('pwd').readlines()
7
gerry

Le moyen le plus simple consiste à utiliser les commandes de la bibliothèque

import commands
print commands.getstatusoutput('echo "test" | wc')
0
Mahmoud