Como redirecionar o stderr do script python3 usando tee pipe?

1

Eu sou um usuário Debian e RedHat. Eu gostaria de redirecionar stderr (módulo logging ) de um script Python3 . O script gera muitas coisas e a parte que eu quero capturar pode ser obtida usando:

python3 ./script.py --input ./*.txt --verbose 2>> ./script.log

Isso anexa stderr a ./script.log . Mas eu manteria esse diálogo também no terminal. Normalmente eu faço isso por piping o comando tee . O problema é que a seguinte linha shell (executada a partir de um arquivo bash ):

pyhton3 ./script.py --input ./*.txt --verbose | tee -a ./script.log

Faz a saída para o terminal, mas não produz nada para ./script.log . Alguma ideia de como proceder?

    
por jlandercy 12.11.2014 / 21:39

2 respostas

2

Para exibir ambos stdout e stderr no terminal enquanto somente capturando stderr para arquivo, use:

python3 ./script.py --input ./*.txt --verbose 2>&1 1>/dev/tty | tee -a script.log

A maneira como o shell lida com redirecionamentos é bastante sutil. Aqui, o 2>&1 faz com que o stderr do comando seja canalizado para o comando tee . 1>/dev/tty resulta no stdout do comando indo diretamente para o terminal. Ordem é importante. Se a ordem desses redirecionamentos for revertida, nada irá para o pipe. Alternativamente, se 1>/dev/tty fosse omitido, tanto stdout quanto stderr seriam canalizados para o comando tee .

    
por 12.11.2014 / 22:06
1

Você pode redirecionar seu stderr para stdout e depois canalizá-lo também tee like that

pyhton3 ./script.py --input ./*.txt --verbose 2>&1 | tee -a ./script.log

    
por 12.11.2014 / 22:10