由于托管人的处理方式,我必须使用系统进行服务。
该服务有一个运行文件,它将执行该文件并将其传输到第二个运行文件中。但是我使用了一个(给定的)python程序包,该程序包记录到stderr而不是stdout,所以我无法让它做我想做的事情。
所以我有一个服务运行脚本:
#!/bin/sh
cd ~/webapp/PriceList
exec python3.4 ~/webapp/PriceList/src/main.py
它通过管道传送到日志记录系统的运行中:
#!/bin/sh
exec multilog t ./main
但是管道没有连接stderr(如预期的那样)。因此,在谷歌搜索之后,我向运行添加了重定向:
#!/bin/sh
cd ~/webapp/PriceList
exec python3.4 ~/webapp/PriceList/src/main.py 2>&1
但这不能解决我的问题:我自己的输出(使用pythons print输出到stdout)已按预期记录。stderr输出未记录。
如果将修改后的runscript重定向到两个文件中,则表明没有重定向(stderr仍在stderr上)。我必须如何修改重定向才能正常工作?
python脚本是否有可能关闭stderr并将其重新打开为文件?
—
爱德华·福尔克
dup2()
在代码中查找对的调用。任何想法,标准错误输出的打算?另一个想法:托管人的运行文件可能在启动代码之前以这种方式重定向stderr。
您可以绝对确认是否将文本发送到stderr吗?请
—
rosuav '17
import sys; print("Hello, stderr", file=sys.stderr)
以一定要替换的脚本替换脚本。
真的是stderr吗?试试这个
—
ingopingo
exec python3.4 ~/webapp/PriceList/src/main.py > out.log 2> err.log
,看看这个日志文件。
如果使用bash而不是sh会发生什么?
—
Luciano Andress Martini
exec ... 2>&1
确实将标准错误加入标准输出中。所以还有其他问题。