Je souhaite obtenir le résultat de certaines commandes du shell telles que ls
ou df
dans un script python. Je vois que commands.getoutput('ls')
est obsolète mais subprocess.call('ls')
ne me fournira que le code de retour.
J'espère qu'il y a une solution simple.
Utilisez le sous-processus.Popen :
import subprocess
process = subprocess.Popen(['ls', '-a'], stdout=subprocess.PIPE)
out, err = process.communicate()
print(out)
Notez que les blocs de communication jusqu'à la fin du processus. Vous pouvez utiliser process.stdout.readline () si vous avez besoin du résultat avant sa fin. Pour plus d'informations, voir documentation .
Pour Python> = 2.7, utilisez subprocess.check_output()
.
http://docs.python.org/2/library/subprocess.html#subprocess.check_output
Pour attraper 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