PM2不记录Python3打印语句

时间:2016-06-22 05:26:45

标签: python pm2

我正在使用PM2在后台运行Python程序,如此

pm2 start helloworld.py

它完美无缺。但是,在helloworld.py中,我有几个用作日志的打印语句。例如,当网络请求进入或者数据库值更新时。当我像这样运行helloworld.py时:

python3 helloworld.py

所有这些打印语句都可见,我可以调试我的应用程序。但是,在运行时

pm2 logs helloworld

这些印刷语句都没有显示出来。

2 个答案:

答案 0 :(得分:12)

这个问题已经有几个月了,所以也许你刚才想到了这个问题,但当我遇到同样的问题时,这是谷歌热门点击之一,所以我想我会添加我发现的内容。

似乎这是python缓冲sys.stdout的问题。在某些平台/实例中,当调用pm2或nohup时,sys.stdout流可能不会被刷新,直到进程退出。传递" -u" python解释器的参数阻止它缓冲sys.stdout。在pm2的process.json中,我添加了" interpreter_args":" -u"我现在正常登录日志。

答案 1 :(得分:-1)

检查文件夹#HOME / .pm2 / logs

例如,请参阅此处的文件夹结构部分:http://pm2.keymetrics.io/docs/usage/quick-start/

还要考虑使用具有与脚本相关的显式日志文件夹的配置文件。 (注意此文件夹必须存在才能在pm2之前使用它。)请参阅http://pm2.keymetrics.io/docs/usage/application-declaration/

{
"apps": [
    {
        "script": "app/server.js",
        "log_date_format": "YYYY-MM-DD HH:mm Z",
        "error_file": "logs/server.web.error.log",
        "out_file": "logs/server.web.out.log",
    ...

遵循这些日志文件的好方法是运行tail

tail -f logs/*.log

更新: 要清楚,使用配置文件适用于python脚本。只需创建一个json配置文件,该文件指定您的脚本以及您希望输出的位置。例如

{
  "apps": [
    {
      "name": "Test Python",
      "script": "test.py",
      "out_file": "test.out.log",
    }
  ]
}

然后运行它     pm2启动test.json 在结果中查找进程ID。使用此进程ID可以停止进程并查看日志文件的位置。例如。 pm2显示3