sys.stdout.write 写入文件追加模式

2 投票
1 回答
3119 浏览
提问于 2025-04-17 22:08

我在尝试解决一个问题,但在手册上找不到相关信息。
我想记录一个日志文件,这个日志文件是重定向的标准输出。
我这样初始化它:

self.stdout_path = os.getenv('LOGPATH','/var/log/logfile.log')

日志记录的部分也很简单:

sys.stdout.write(msg)

这工作得很好(守护进程记录了我需要的所有数据),但有一个问题,就是当我重启守护进程时,它会重新打开日志文件进行写入,并把内容清空。我在想是否可以以追加的方式打开日志文件,但我找不到实现的方法。我不太确定这是否可行(因为标准错误输出通常是一个特殊的块设备,比如/dev/tty)。我希望能保持现在的方式——重定向输出——但如果不行,我可以改成用os.write来处理,但我其实不太想这样。

编辑:

好的,看来问题出在守护进程的库上。

Traceback (most recent call last):
  File "/usr/local/bin/mambocollector", line 167, in <module>
     mambo_runner = runner.DaemonRunner(mambo)
  File "/usr/lib/python2.6/site-packages/daemon/runner.py", line 80, in __init__
     self.daemon_context.stdout = open(app.stdout_path, 'w+')
  AttributeError: 'Mambo' object has no attribute 'stdout_path'

所以我需要把这个

self.daemon_context.stdout = open(app.stdout_path, 'w+')

改成

         self.daemon_context.stdout = open(app.stdout_path, 'a+')

1 个回答

1

这样做可以吗?

sys.stdout = open(os.getenv('LOGPATH','/var/log/logfile.log'), 'a')

撰写回答