将 stdout 和 stderr 重定向到文件在 raspbian 上不起作用

Redirection of stdout and stderr to file not working on raspbian

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

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

脚本在与我的服务器之间传输数据时运行正确,但 client.log 文件仍然为空。我试过了&>&>>; >>2>&1;和 |&。 None 将任何数据写入 client.log

sudo ./main.py

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

您要查找的语法是:

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

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


已编辑以在下方评论后添加其他信息

修改后的语法:

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

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