Python 输出未正确重定向
我通过iTerm在bash控制台上运行这个命令Python 输出未正确重定向,python,bash,logging,Python,Bash,Logging,我通过iTerm在bash控制台上运行这个命令 { cd /usr/local/path/to/code; echo "hi1"; sudo chmod 777 /tmp/dissolve.log; echo "hi2"; python someapp/runner.py dissolve; echo "hi3"; } > /tmp/dissolve.log & 在跟踪我得到的文件时: tail: /tmp/dissolve.log: file truncated hi1 hi2
{ cd /usr/local/path/to/code; echo "hi1"; sudo chmod 777 /tmp/dissolve.log; echo "hi2"; python someapp/runner.py dissolve; echo "hi3"; } > /tmp/dissolve.log &
在跟踪我得到的文件时:
tail: /tmp/dissolve.log: file truncated
hi1
hi2
我无法理解为什么我没有得到文件python someapp/runner.py dissole
的输出,当我执行cmd+c时,预期的输出出现在tail
日志上。runner.py
中的代码片段:
if __name__ == '__main__':
program_name = sys.argv[1]
if program_name == 'dissolve':
obj = SomeClass() # this is properly imported
obj.some_function() # this has lot of `print` statements, which i intened to catch in '/tmp/dissolve.log'
初始的print
是否在some_函数()中传递/tmp/dissole.log
以外的值
有任何关于为什么会发生这种情况的建议吗?这似乎是一个问题,因为您正在将输出发送到一个文件。您可以使用stdbuf
强制执行行缓冲,如下所示:
{ cd /usr/local/path/to/code;
echo "hi1";
sudo chmod 777 /tmp/dissolve.log;
echo "hi2";
stdbuf -oL python someapp/runner.py dissolve;
echo "hi3"; } > /tmp/dissolve.log &
似乎是一个缓冲问题。你能在obj.some_function()
内定期刷新缓冲区,看看是否有帮助吗?您还可以在python命令前面加上stdbuf-oL
,以强制执行行缓冲。有关更多信息,请参阅print
仍无法进入tail
:(正在查找如何定期刷新缓冲区!在python中执行函数之前,我添加了sys.stdout.flush()
,不起作用!!:(如果单独运行python脚本,而不重定向其输出,该怎么办?我按照您在python脚本中的建议添加了flush
,直接从代码将输出写入文件,现在可以工作了……!!::)