Python日志模块 - 在命令行运行时输出到文本文件

6
我有一个使用logging模块将数据输出到文本文件的python程序,问题是当我在PyCharm中运行脚本时(1-10值被输出到控制台屏幕并写入Log_Test_File.txt),文本文件的输出正常,但是当我从命令行运行脚本时,只有控制台输出出现(没有任何内容写入到*.txt文件中)。这在Ubuntu或我的Raspberry Pi上都发生了。
我将自动启动Pi(作为超级用户)上的脚本。有没有一种方法可以配置Pi或脚本,以使文本输出正常工作?
#!/usr/bin/python
# -*- coding: utf-8 -*-

import logging

logging.basicConfig(filename="Log_Test_File.txt",
                level=logging.DEBUG,
                format='%(levelname)s: %(asctime)s %(message)s',
                datefmt='%m/%d/%Y %I:%M:%S')

i=0
while i<10:
    logging.info("Logging test: {}".format(i))
    i+=1

请更具体地描述问题和任何错误。"...在PyCharm中运行脚本时正常工作,但从命令行运行脚本时不正常"是含糊的。 - ChrisP
1个回答

3

您提供的代码运行良好。

如果您遇到找不到已正确创建的日志文件的问题,原因可能是:

  • 没有权限创建日志文件
  • 脚本根本无法运行

如果您计划将脚本作为长时间运行的服务运行,我建议跳过创建显式日志文件,而是记录到stdout。发送到stdout的输出易于由控制脚本执行的程序(例如supervisord,systemd等)查看、捕获和处理。

另一个选择是直接记录到syslog,但这可能会变得更加复杂,因为您的程序必须自行了解用于标识进程的值。对于进程管理器来说,这通常比程序本身要简单得多。


感谢您的回复 - 如果可能的话,我更喜欢使用日志记录模块(例如,我可以方便地将日志级别从DEBUG更改为INFO),您有什么想法权限问题可能是什么或者我该如何更改它? - AdamDynamic
@AdamDynamic,您可以使用标准日志记录和StreamHandler将日志记录到stdout或stderr。关于权限问题 - 只需确保运行脚本的用户能够创建日志文件所在的位置 - 例如通过简单的$ touch the_log_file.log。如果失败,请使用chownchmod - Jan Vlcinsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接