J'ai testé le stderr avec le module de sous-processus. Si j'écris un test simple avec shell = True avec la commande shell linux ls
typé intentionnellement mauvais:python: stderr avec shell = True ou shell = False dans le module de sous-processus
p=subprocess.Popen(["lr"],stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
out, err=p.communicate()
print ("standard error")
print(err)
il sort habituel de la coquille: lr: command not found
.
Mais si shell=False
, je ne comprends pas pourquoi le programme a une erreur exécution je pensais que
Traceback (most recent call last):
File "importInteresantes.py", line 6, in <module>
p=subprocess.Popen(["lr"],stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=False)
File "/usr/lib/python2.7/subprocess.py", line 390, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1024, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
il me donnerait la même sortie. Est-ce que le code est faux ou est le point de vue que je devrais obtenir le même stderr?
NOTE: Juste au cas où j'ai aussi essayé avec python3
Les mécanismes utilisés pour lancer la commande sont très différents dans les deux cas. Pourquoi attendez-vous exactement que le diagnostic d'erreur soit identique? – NPE
"lr: commande non trouvée" était un message d'erreur shell. Si vous n'utilisez pas de shell, vous n'avez pas de shell pour afficher les messages d'erreur du shell. – jasonharper
Mais ce que je m'attends à ce que le programme fonctionne au moins, puis une erreur apparaît. Pas que ça ne puisse pas fonctionner du tout. Donc vous ne pouvez pas savoir pour les cas que je tape une mauvaise commande avec python? J'ai également entendu que l'utilisation de 'shell = True' peut être risquée –