【问题标题】:Redirection of stdout and stderr to file not working on raspbian将 stdout 和 stderr 重定向到文件在 raspbian 上不起作用
【发布时间】:2017-03-09 21:15:52
【问题描述】:

我正在尝试将 STDOUTSTDERR 重定向到树莓派上的日志文件。 我的.sh 脚本包含这一行

sudo ./main.py &> client.log &

脚本在向我的服务器传输数据和从我的服务器传输数据时正确运行,但client.log 文件仍然为空。我试过&>&>>; >>2>&1;和|&。他们都没有向client.log写入任何数据。

sudo ./main.py

同时产生stdoutstderr 输出。我做错了什么?

【问题讨论】:

    标签: stdout raspbian stderr io-redirection


    【解决方案1】:

    您要查找的语法是:

    sudo ./main.py > client.log 2>&1 &
    
    • > client.log 将标准输出重定向到文件 client.log
    • 2>&1 将标准错误重定向到标准输出
    • 行尾的& 在后台运行,因此您可以在命令提示符下继续工作。

    注意:如果您在后台命令运行时注销,它将被杀死。您可以通过将nohup 添加到行首来覆盖此行为。更多信息谷歌bash jobs


    在下面的评论后编辑以添加其他信息

    修改语法:

    sudo stdbuf -o L -e L ./main.py > client.log 2>&1 &
    
    • stdbuf 修改默认的 linux 输出缓冲
    • -o L 在每行末尾刷新标准输出
    • -e L 在每行末尾刷新标准错误

    【讨论】:

    • 看来我错了......这个解决方案以及我原始帖子中的其他几个解决方案确实将数据写入 client.log,但他们在写入后 15 分钟到几个小时才会这样做stdout/stderr by main.py,输出往往会在任意位置被截断,即在行的中间...
    【解决方案2】:

    python -u test.py > output.txt & 默认情况下,Python 将缓冲您的输出,并且简单地终止脚本不会立即将该标准输出刷新到磁盘

    【讨论】:

      猜你喜欢
      • 2014-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-07
      • 2016-02-19
      • 1970-01-01
      • 2011-12-28
      • 1970-01-01
      相关资源
      最近更新 更多