我有一个Bash命令,它运行一个python脚本,并在标准输出和标准错误时产生输出。
正常日志和错误日志用这个命令分别写入到不同的文件中:
python3 file.py >> normal.log 2>> error.log
另外,stdout和stderr应该转发到一个外部程序(例如logtotelegraph .sh):
python3 file.py 2>&1 | logToTelegram.sh
是否有一种方法在一次执行期间实现这两个,写日志文件(正常和错误)和管道标准输出和标准错误一起到程序logtotelegraph .sh?
这应该能奏效:
( python3 file.py 2> >(tee -a error.log) > >(tee -a normal.log) ) | logToTelegram.sh
注意,2> >(tee ...)
必须放在> >(tee ...)
之前才能正常工作。为简单起见,两个tee
命令都输出到标准输出,在管道到logToTelegram.sh
之前不需要2>&1
。
或者,为了更接近原始代码,更精确:
( python3 file.py > >(tee -a normal.log) 2> >(tee -a error.log >&2) ) 2>&1 | logToTelegram.sh
这里,第一个tee
输出到stdout,而第二个tee
输出到stderr,因此2>&1
需要将所有输出发送到logToTelegram.sh
。