将标准输出发送到/dev/null 时 Python 日志记录类不起作用

将标准输出发送到/dev/null 时 Python 日志记录类不起作用

我有一个启用了日志记录的 Python 3 脚本(用于调试目的)。每当我运行/执行此脚本时,它都运行良好,并且会创建日志文件。

我还创建了一个 setup.sh-bash 脚本来下载和安装我的应用程序。然后它会自动使用以下命令启动脚本:禁止,以便让它在后台运行。此命令后面跟着 > /dev/null 2>&1 &,因此它不会向控制台输出任何内容。但是,这会使 Python 的日志记录模块“出错”,因为它无法再向日志文件输出任何内容。如果我没记错的话,它会输出到 /dev/null。

我在网上搜索以找到解决方案,但每次尝试都失败了。我希望有人能对此提出一个想法。也许我应该使用其他方法让我的脚本永远运行(当然直到重新启动 :)),可以使用 Python 3 日志记录模块,并且控制台中没有输出。

我用来启动脚本的确切命令如下:

su -l -s /bin/bash scriptuser -c 'nohup python3 '/etc/scriptroot/main.py > /dev/null 2>&1 &'

提前致谢

答案1

我很“抱歉”地说,现在我自己找到了解决方案。看来我挖得不够深。我现在使用大多数 UNIX 系统支持的 daemon-start-stop,它工作正常。

我按照互联网上的教程进行操作,可以在这里找到:http://blog.scphillips.com/2013/07/getting-a-python-script-to-run-in-the-background-as-a-service-on-boot/

我希望这可以帮助很多遇到同样问题/寻找同样答案的其他用户。

谢谢阅读。

答案2

此问题是由于 Python stdout 被行缓冲所致。如果您使用 -u 标志运行该命令,它将使用无缓冲的 stdout 和 stderr:

su -l -s /bin/bash scriptuser -c 'nohup python3 -u '/etc/scriptroot/main.py > /dev/null 2>&1 &'

相关内容