Skip to main content
 首页 » 编程设计

python之从 Python 守护进程认真打印到标准输出

2025年05月04日19powertoolsteam

我使用 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 中输入时它会中断我的输入:

(daemon)modocache $ git clomatt daemon!! 
matt daemon!!ne 
matt daemon!! https://github.com/schacon/cowsay.git 
(daemon)modocache $  

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

(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 

如果这是一个愚蠢的问题,请原谅,我不太熟悉 shell 的一般工作方式。

编辑:澄清

我希望此脚本运行守护进程的原因是我想从 shell 中向 shell 用户提供更新,例如以非侵入方式将天气更新打印到控制台。如果有更好的方法来实现这一点,请告诉我。但目的是在不阻塞的情况下显示终端内的信息(而不是通过 Growl 通知)。

请您参考如下方法:

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

“普通用户”shell 提示的 shell 变量是 PS1,因此谷歌搜索 bash PS1 或 bash 提示自定义 会给你一些有趣的例子。

这是一些链接:

通常,您可以在提示字符串中包含任意脚本的输出。但是请注意,高延迟命令会延迟提示字符串的打印,直到它们可以被评估为止,因此缓存信息可能是个好主意。 (例如,如果你想显示天气网站的天气,不要让你的 bash 提示消失,每次显示提示时都检索网页!)