如何使用 tee 管道重定向 python3 脚本的 stderr?

如何使用 tee 管道重定向 python3 脚本的 stderr?

我是 Debian 和 RedHat 用户。我想loggingPython3脚本重定向 stderr(模块)。该脚本输出很多内容,我想要捕获的部分可以使用以下方法获取:

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

这会将 stderr 附加到./script.log。但我也会将此对话框保留在终端中。通常我通过以下方式实现此目的管道命令tee。问题是,以下shell行(从文件执行bash):

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

确实输出到终端,但没有输出任何内容./script.log。知道如何继续吗?

答案1

显示两个都终端上的 stdout 和 stderr仅有的将 stderr 捕获到文件,使用:

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

shell 处理重定向的方式非常微妙。在这里,2>&1命令的 stderr 中的结果被管道传输到tee命令。 1>/dev/tty导致命令的 stdout 直接进入终端。顺序很重要。如果这些重定向的顺序被反转,则不会有任何内容进入管道。或者,如果1>/dev/tty省略,则 stdout 和 stderr 都将通过管道传输到tee命令。

答案2

您可以将 stderr (2) 重定向到 stdout (1),然后通过管道将其传输到 tee

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

相关内容