web-dev-qa-db-fra.com

Comment supprimer la sortie de subprocess.run ()?

D'après les exemples dans la documentation sur subprocess.run() il semble qu'il ne devrait pas y avoir de sortie de

subprocess.run(["ls", "-l"])  # doesn't capture output

Cependant, quand je l'essaye dans un python Shell la liste est imprimée. Je me demande si c'est le comportement par défaut et comment supprimer la sortie de run().

19
planetp

Pour supprimer la sortie, vous pouvez rediriger vers /dev/null

import os
import subprocess

with open(os.devnull, 'w') as devnull:
    subprocess.run(['ls', '-l'], stdout=devnull)
    # The above only redirects stdout...
    # this will also redirect stderr to /dev/null as well
    subprocess.run(['ls', '-l'], stdout=devnull, stderr=devnull)
    # Alternatively, you can merge stderr and stdout streams and redirect
    # the one stream to /dev/null
    subprocess.run(['ls', '-l'], stdout=devnull, stderr=subprocess.STDOUT)

Si vous voulez capturer la sortie (à utiliser plus tard ou à analyser), vous devez utiliser subprocess.PIPE

import subprocess
result = subprocess.run(['ls', '-l'], stdout=subprocess.PIPE)
print(result.stdout)

# To also capture stderr...
result = subprocess.run(['ls', '-l'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print(result.stdout)
print(result.stderr)

# To mix stdout and stderr into a single string
result = subprocess.run(['ls', '-l'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
print(result.stdout)
47
SethMMorton