Python 子shell中的监听器事件监听器

Python 子shell中的监听器事件监听器,python,bash,supervisord,Python,Bash,Supervisord,我正在编写一个主管事件侦听器,它可以将进程状态事件发送到队列中进行进一步处理。事件侦听器是用Python编写的,我们称之为handler.py。我有一个Python的内部构建和发布系统,它允许我在使用无所不在的bash脚本(称为launcher.sh)从任何服务器执行Python脚本之前创建虚拟环境,该脚本基本上如下所示 ... create virtualenv activate virtualenv python -m main_module 然后在我的supervisor实例中配置事件侦

我正在编写一个主管事件侦听器,它可以将进程状态事件发送到队列中进行进一步处理。事件侦听器是用Python编写的,我们称之为handler.py。我有一个Python的内部构建和发布系统,它允许我在使用无所不在的bash脚本(称为launcher.sh)从任何服务器执行Python脚本之前创建虚拟环境,该脚本基本上如下所示

...
create virtualenv
activate virtualenv
python -m main_module
然后在我的supervisor实例中配置事件侦听器,如下所示:

[eventlistener:feedback]
command = launcher.sh handler.py
events=PROCESS_STATE
我可以看到处理程序打印就绪\n到它的标准输出,但没有任何事件传播到它,最终主管开始抱怨事件缓冲区溢出。然后,如果我将事件侦听器配置更改为直接调用python,就像这样,事情就会变得生动起来

[eventlistener:feedback]
command = <path to virtualenv>/bin/python handler.py
events=PROCESS_STATE
[eventlistener:反馈]
command=/bin/python handler.py
事件=进程状态

我尝试过的一件事是在launcher.sh中使用exec调用python,我发现没有子进程是以这种方式生成的,但它仍然不起作用。我想知道这是否与标准输出写入的缓冲或类似的东西有关,但我在这方面的知识有限。如果有任何帮助,我将不胜感激。

要回答我自己的问题,通过阅读主管代码,它会检查stdout_text.startswith('READY'),因此我必须确保我的launcher.sh脚本在启动事件处理程序之前没有打印任何内容