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.

È stato utile?

Soluzione

os.dup2(1, 2)

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
scroll top