将stdout和stderr重定向到不在raspbian上工作的文件

时间:2016-10-27 08:58:35

标签: stdout raspbian stderr io-redirection

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

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

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

sudo ./main.py

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

2 个答案:

答案 0 :(得分:3)

您正在寻找的语法是:

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

注意:如果在后台命令运行时注销,它将被终止。您可以通过将nohup添加到行的开头来覆盖此行为。有关详情,请访问bash jobs

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

修订语法:

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

答案 1 :(得分:0)

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