Reindirizzare stderr allo stdout il processo exec-ed in pitone?
-
22-09-2019 - |
Domanda
In uno script bash, posso scrivere:
exec 2>&1
exec someprog
E l'uscita di stderr someprog
sarebbe reindirizzato a stdout.
C'è un modo per fare una cosa simile utilizzando os.exec*
funzioni?
Questa non deve essere portatile, solo lavoro su Linux.
Soluzione
esempi illuminante
Diamo eseguire /bin/ls
con un argomento fasullo in modo che si lamenta con stderr.
$ python -c "import os; os.execl('/bin/ls', '', 'ffweew')" 1>/dev/null : ffweew: No such file or directory $ python -c "import os; os.execl('/bin/ls', '', 'ffweew')" 2>/dev/null $ python -c "import os; os.dup2(1, 2); os.execl('/bin/ls', '', 'ffweew')" 1>/dev/null $ python -c "import os; os.dup2(1, 2); os.execl('/bin/ls', '', 'ffweew')" 2>/dev/null : ffweew: No such file or directory $
I primi due invocazioni dimostrano che ls
non scrive sullo standard output, e scrive il messaggio di errore a stderr.
Nel 3 ° e il 4 ° invocazione, il programma Python duplica descrittore di file 1 come descrittore di file 2, ottenendo l'effetto desiderato.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow