Bash转发标准输出,标准输出和管道到外部程序



我有一个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

相关内容

  • 没有找到相关文章

最新更新