Я использую Supervisor (контроллер процессов, написанный на python) для запуска и управления моим веб-сервером и связанными службами. Иногда мне нужно войти в pdb (или действительно в ipdb) для отладки, когда сервер работает. У меня возникли проблемы с выполнением этого через Supervisor.
Supervisor позволяет запускать процессы и управлять ими с помощью демона supervisord, а также предлагает доступ через клиент с именем supervisorctl. Этот клиент позволяет вам подключиться к одному из процессов переднего плана, который был запущен с помощью команды «fg». Как это:
supervisor> fg webserver
Все данные журнала отправляются на терминал. Но я не получаю никакого текста от отладчика pdb. Он принимает мой ввод, поэтому стандартный ввод, похоже, работает.
В рамках моего расследования я смог подтвердить, что ни print
, ни raw_input
не отправляли текстовые сообщения; но в случае raw_input
стандартный ввод действительно работает.
Я также смог подтвердить, что это работает:
sys.stdout.write('message')
sys.flush()
Я думал, что когда я выдал команду fg
, это было бы так, как если бы я запустил процесс на переднем плане в стандартном терминале ... но похоже, что supervisorctl делает что-то большее. Обычная печать например не смывается. Любые идеи?
Как заставить pdb, стандартную печать и т. д. работать правильно при подключении к терминалу переднего плана с помощью команды fg
в supervisorctl?
(Возможная полезная ссылка: http://supervisord.org/subprocess.html#nondaemonizing-of-subprocesses)
fflush('stdout');
Это должно помочь. - person Games Brainiac   schedule 17.03.2013