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?
>>> 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()
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()
.
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()
Le moyen le plus simple consiste à utiliser les commandes de la bibliothèque
import commands
print commands.getstatusoutput('echo "test" | wc')