我正在使用 Supervisor(用 python 编写的进程控制器)来启动和控制我的 Web 服务器和相关服务。我发现有时需要在服务器运行时进入 pdb(或真正的 ipdb)进行调试。我无法通过主管执行此操作。
Supervisor 允许使用名为 supervisord 的守护进程启动和控制进程,并通过名为 supervisorctl 的客户端提供访问权限。此客户端允许您附加到已使用“fg”命令启动的前台进程之一。像这样:
supervisor> fg webserver
所有记录数据都被发送到终端。但是我没有从 pdb 调试器中得到任何文本。它确实接受我的输入,所以标准输入似乎正在工作。
作为我调查的一部分,我能够确认既不发送print
也不raw_input
发送短信;但在标准输入的情况下raw_input
确实有效。
我还能够确认这有效:
sys.stdout.write('message')
sys.flush()
我认为,当我发出fg
命令时,就好像我已经在标准终端的前台运行了该进程......但似乎 supervisorctl 正在做更多的事情。例如,常规打印不会刷新。有任何想法吗?
fg
使用supervisorctl 中的命令连接到前台终端时,如何使 pdb、标准打印等正常工作?
(可能有用的参考:http ://supervisord.org/subprocess.html#nondaemonizing-of-subprocesses )