Une légère modification au code de @ SvenMarnach qui aborde la question de l'impression dans le flux de sortie standard. Si vous utilisez la fonction subprocess.check_output()
au lieu de subprocess.call()
, vous pouvez gérer la chaîne normalement imprimée dans votre code, tout en interceptant les exceptions et le code d'état de sortie.
Si vous voulez supprimer le flux de sortie standard dans le terminal, ne pas imprimer la std sur la chaîne qui est renvoyée par check_output
:
import subprocess
import os
try:
stdout_string = subprocess.check_output(["wget", "--help"], stderr=subprocess.STDOUT)
# print(stdout_string)
except subprocess.CalledProcessError as cpe:
print(cpe.returncode)
print(cpe.output)
except OSError as e:
if e.errno == os.errno.ENOENT:
print(e)
else:
# Something else went wrong while trying to run `wget`
print(e)
Le code d'état de sortie non nulle et chaîne de sortie sont élevés dans le CalledProcessError
comme subprocess.CalledProcessError.returncode
et subprocess.CalledProcessError.output
afin que vous puissiez faire ce que vous voulez avec eux.
Si vous souhaitez imprimer sur la borne de sortie standard de l'exécutable, imprimez la chaîne renvoyée:
import subprocess
import os
try:
stdout_string = subprocess.check_output(["wget", "--help"], stderr=subprocess.STDOUT)
print(stdout_string)
except subprocess.CalledProcessError as cpe:
print(cpe.returncode)
print(cpe.output)
except OSError as e:
if e.errno == os.errno.ENOENT:
print(e)
else:
# Something else went wrong while trying to run `wget`
print(e)
print()
ajoute une nouvelle ligne supplémentaire à la chaîne. Si vous voulez éliminer que (erreurs d'écriture et std au flux err std au lieu de std en flux comme indiqué avec les états d'impression() ci-dessus), utilisez sys.stdout.write(string)
et sys.stderr.write(string)
au lieu d'impression():
import subprocess
import os
import sys
try:
stdout_string = subprocess.check_output(["bogus"], stderr=subprocess.STDOUT)
sys.stdout.write(stdout_string)
except subprocess.CalledProcessError as cpe:
sys.stderr.write(cpe.returncode)
sys.stderr.write(cpe.output)
except OSError as e:
if e.errno == os.errno.ENOENT:
sys.stderr.write(e.strerror)
else:
# Something else went wrong while trying to run `wget`
sys.stderr.write(e.strerror)
double possible de [Test si exécutable existe en Python?] (http://stackoverflow.com/questions/377017/test-if-executable-exists-in-python) –