我正在尝试将STDOUT
和STDERR
重定向到raspberry pi上的日志文件。
我的.sh
脚本包含此行
sudo ./main.py &> client.log &
脚本在向我的服务器传输数据时正确运行,但client.log
文件仍为空。我试过&>
; &>>
; >>
与2>&1
;和|&
。他们都没有将任何数据写入client.log
。
sudo ./main.py
生成stdout
和stderr
输出。我做错了什么?
答案 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会缓冲你的输出,简单地杀死脚本并不会立即将标准输出刷新到磁盘