Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 输出未正确重定向_Python_Bash_Logging - Fatal编程技术网

Python 输出未正确重定向

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

我通过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
我无法理解为什么我没有得到文件
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
,直接从代码将输出写入文件,现在可以工作了……!!::)