从Python守护进程打印到stdout

2024-05-23 19:23:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我用python-daemon编写了一个简单的脚本,它打印到sys.stdout

#!/usr/bin/env python
#-*- coding: utf-8 -*-

import daemon
import sys
import time


def main():
    with daemon.DaemonContext(stdout=sys.stdout):
        while True:
            print "matt daemon!!"
            time.sleep(3)


if __name__ == '__main__':
    main()

这个脚本和我希望的一样工作,除了一个主要缺陷——当我在shell中键入时,它会中断我的输入:

^{pr2}$

有没有办法让输出以非侵入性的方式显示?我希望有这样的东西:

(daemon)modocache $ git clo
matt daemon!! # <- displayed on new line
(daemon)modocache $ git clo # <- what I had typed so far is displayed on a new line

如果我对这个问题不太熟悉,请原谅我。在

编辑:澄清

我希望这个脚本运行daemonized的原因是我想从shell内部向shell用户提供更新,比如以非侵入性的方式将天气更新打印到控制台。如果有更好的方法来实现这一点,请告诉我。但目的是显示终端内部的信息(不是通过咆哮通知),而不是阻塞。在


Tags: importgit脚本timemainonstdoutsys
3条回答

根据定义,守护进程应该在后台运行。因此它应该写入日志文件。在

因此,要么将输出重定向到日志文件(shell重定向或将其交给某个sys logging守护进程),要么用python代码将其写入日志文件。在

更新:

man write
man wall

http://linux.die.net/man/1/writehttp://linux.die.net/man/1/wall

最好的做法是写入守护进程的日志文件。但是你能不能不写信给stderr,并且用交织的线来实现上面所期望的行为呢?在

如果它不需要是一个“即时”通知,并且您可以等到用户下一次运行命令时,您可以在bashshell提示符中烘焙各种内容。例如,我的告诉我时间和我所在目录的git存储库状态。在

“normal user”shell提示的shell变量是PS1,所以在google上搜索bash PS1bash prompt customisation将得到一些有趣的示例。在

以下是一些链接:

通常,可以在提示字符串中包含任意脚本的输出。但是,请注意,高延迟命令将延迟提示字符串的打印,直到可以对其求值,因此缓存信息可能是一个好主意。(例如,如果要从天气网站显示天气,请不要在每次显示提示时都发出bash提示并检索网页!)在

相关问题 更多 >