我是 Debian 和 RedHat 用户。我想logging
从Python3
脚本重定向 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