Enregistrer le message d'erreur de sous-processus de commande

Lors de l'exécution de commande bash à l'aide de sous-processus, je pourrais courir dans la situation où la commande n'est pas valide. Dans ce cas, bash renvoyait une erreur de message vocal. Comment peut-on attraper ce message? Je voudrais enregistrer ce message dans un fichier journal.
L'exemple suivant est un exemple, où j'essaie de la liste des fichiers dans un non-existait répertoire.

try:
    subprocess.check_call(["ls", "/home/non"]) 
    df = subprocess.Popen(["ls", "/home/non"], stdout=subprocess.PIPE)        
    output, err = df.communicate()
    # process outputs
except Exception as error:        
    print error
    sys.exit(1)

Bash serait imprime "ls: impossible d'accéder à /home/non: No such file or directory". Comment puis-je obtenir ce message d'erreur? L'erreur détectée par l'exception de la ligne est clairement différente, il est dit de la Commande "'['ls', '/home/non']' retourné non nulle de sortie d'état 2".

  • Je pense que vous avez besoin de rediriger les deux: c'est à dire stdout=subprocess.PIPE, stderr=subprocess.STDOUT puis le message d'erreur sera dans err.
  • Merci pour la suggestion. Je viens de vérifier, le message d'erreur est en sortie si l'option ajouter "stderr=..." à la Popen. Je préfère un moyen de rattraper ce message par le excepeté ligne, si il y a de tout. Des idées?
  • Pour cela vous avez besoin de communication interprocessus. Depuis subprocess.Popen() pouvez commencer toute sorte d'autres processus qui serait difficile. Sur vos seules options générales sont returncode et de tuyaux. Pensez à utiliser subprocess.check_output au lieu de Popen.
InformationsquelleAutor Luke | 2015-04-11