【问题标题】:Python stdout logging: terminal vs bash filePython 标准输出日志记录:终端 vs bash 文件
【发布时间】:2014-11-25 01:20:36
【问题描述】:

我不是 Bash 和 Python 方面的专家,所以这个问题可能看起来很愚蠢。

我有一个名为 learn.py 的 Python 脚本,当重定向到日志文件时,我注意到标准输出有两种不同的行为。

如果我从终端调用它,我可以看到脚本运行时日志文件的大小在增加。

$ ./learn.py > file.log

但是,如果我为相同目的创建一个 bash 文件:

#!/bin/bash
./learn.py > file.log

脚本启动(我检查了pgrep)但它似乎没有运行,因为日志文件保持为空。我错过了什么吗?

【问题讨论】:

  • 您能发布您的learn.py 脚本的作用吗?
  • 即使你输入的learn.pyprint "Hello?" ...
  • @Balthamos learn.py 是一个使用 NLTK 库的复杂脚本。 @JoranBeasley 只需输入“你好”即可。文件是否可能仅在计算结束时才被填充?
  • 它正在缓冲,但我不知道为什么它会决定只在脚本中缓冲。你是怎么开始的?
  • @thatotherguy 在使用chmod +x 设置可执行文件后,我使用./launcher 启动bash 脚本。

标签: python linux bash terminal stdout


【解决方案1】:

我使用Logging facility for Python解决了,通过插入

import logging
logging.basicConfig(filename='file.log',level=logging.INFO)

并将每次出现的print "..." 替换为

logging.info("...")

最终的 Bash 脚本:

#!/bin/bash
./learn.py

【讨论】:

    【解决方案2】:

    你可以使用nohup:

    你也可以使用 & 让它在后台运行

    #!/bin/bash
    nohup python learn.py >> file.log &
    

    【讨论】:

      猜你喜欢
      • 2018-05-27
      • 2017-04-13
      • 2016-09-24
      • 1970-01-01
      • 1970-01-01
      • 2020-10-12
      • 1970-01-01
      • 2016-04-26
      • 2020-11-30
      相关资源
      最近更新 更多