Метод заглянуть в программу Python, запущенную прямо сейчас

Возможно ли найти любую информацию о том, что работает сейчас программа Python, не прерывая ее?

Кроме того, если это невозможно, есть ли способ свернуть запущенную программу Python, чтобы я мог хотя бы получить stacktrace (используя PyDev на Ubuntu)?

Я знаю, что я должен был использовать журналы или запускать их в режиме отладки или вставлять инструкцию для запуска отладчика...

Связанные вопросы

Ответы

Ответ 1

Если у вас есть запущенный Python, который не был создан с помощью какого-либо механизма трассировки или регистрации, и вы хотите увидеть, что он делает внутри, то два варианта:

Ответ 2

Если вы разместите

import code
code.interact(local=locals())

в любой точке вашего script, python будет создавать экземпляр оболочки python именно в этой точке, которая имеет доступ ко всему в состоянии script в этой точке. ^ D выходит из оболочки и возобновляет выполнение за эту точку.

Вы можете даже изменить состояние в этой точке из оболочки, функций вызова и т.д.

Ответ 3

Чтобы "свернуть" программу python с помощью stacktrace, вы можете отправить ее SIGINT, то есть, если вы не поймаете ее или не поймаете KeyboardInterrupt (python по умолчанию устанавливает обработчик SIGINT, что вызывает KeyboardInterrupt).

Что касается отладки, не поддерживает ли PyDev встроенную поддержку отладки (через pdb)?

Ответ 4

Лично я предпочитаю ipdb. Это pdb с добавлением IPython добра. Кажется, это больше интерактивный интерпретатор Python с несколькими ярлыками для функций отладки.

Ответ 5

Установите обработчик сигнала, который устанавливает функцию трассировки с sys.settrace(), которая печатает трассировку и очищает очищает функцию трассировки. Это позволит вам увидеть, где ваша программа находится в любой момент, не прерывая ее. Обратите внимание, что этот сигнал обрабатывается после каждого инструкций python sys.getcheckinterval().

Ответ 6

Если вы довольны крахом, вставка "1/0" создаст быструю и грязную точку останова с полной обратной трассировкой!

Ответ 7

Вы можете использовать lptrace. Он как strace для программ Python - позволяет вам подключаться к запущенному процессу Python и печатать каждый вызов функции, который он делает.