【问题标题】:Stdout not being written to file?标准输出没有被写入文件?
【发布时间】:2015-05-17 08:34:53
【问题描述】:

我在这里遇到了一些问题,我不知道发生了什么。

我有一个 python 脚本 test.py 连接到我的服务器,获取一些信息,然后打印这些信息(本质上是无限循环)。

我还有一个 bash 脚本 starter.sh 如下:

#!/bin/bash

if [ ! `pgrep python` ]; then
    cd /home/user/test
    python test.py
fi

当我从终端运行它时,一切都很好并且按预期工作。它只是将一些文本写入控制台。

当我涉及 cron 作业时会出现问题。

我有以下 cron 工作:

*/1 * * * * /home/user/test/starter.sh >> /home/user/test/log.txt 2>&1

当 cron 作业运行时(我知道它运行是因为我检查了我的服务器,它接收到连接、数据请求,然后发送数据。

我想记录我的 python 脚本打印的任何内容。但是没有任何东西被写入日志?我该怎么办

编辑:简单地运行 python test.py>>echo.txt 或 python test.py>echo.txt 似乎也不起作用。

我正在使用python的打印功能来打印数据

【问题讨论】:

  • python test.py >>echo.txt 不起作用,但 python test.py >>/h​​ome/user/echo.txt 起作用

标签: python bash cron


【解决方案1】:

好的,我似乎找到了问题(如果其他人碰巧遇到同样的问题)。问题是 python 2.7 中的打印不刷新标准输出。通过运行 python -u test.py 这解决了问题并且工作正常

来自 man,这是 -u 开关的作用:

-u 强制标准输入、标准输出和标准错误完全无缓冲。上 重要的系统,也将 stdin、stdout 和 stderr 放入 二进制模式。请注意,xread- 中有内部缓冲 lines()、readlines() 和文件对象迭代器(“for line in sys.stdin") 不受此选项影响。工作 围绕这个,你会想在里面使用“sys.stdin.readline()” 一个“while 1:”循环

【讨论】:

    【解决方案2】:

    我也是 @bash 脚本的初学者。我猜它应该可以工作

    #!/bin/bash
    
    if [ ! `pgrep python` ]; then
        cd /home/user/test
        python test.py >> /home/user/test/log.txt
    fi
    

    【讨论】:

      猜你喜欢
      • 2018-12-07
      • 2011-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-18
      • 2012-06-04
      • 1970-01-01
      • 2012-06-01
      相关资源
      最近更新 更多