スーパーバイザー (Python で記述されたプロセス コントローラー) を使用して、Web サーバーと関連サービスを開始および制御しています。サーバーの実行中にデバッグするために、pdb(または実際にはipdb)に入る必要がある場合があります。スーパーバイザーでこれを行うのに問題があります。
Supervisor は、supervisord と呼ばれるデーモンでプロセスを開始および制御できるようにし、supervisorctl と呼ばれるクライアントを介したアクセスを提供します。このクライアントを使用すると、「fg」コマンドを使用して開始されたフォアグラウンド プロセスの 1 つに接続できます。このような:
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 )