Ответ 1
Это была ошибка в IPython 5.1. Это было исправлено в этом запросе на получение и больше не является проблемой с IPython 5.2 и выше. Теперь вы можете использовать q
, quit()
или Ctrl + d для выхода из отладчика.
Мне нравится проверять ошибку в Python script, используя:
$ python3 -m pdb my_script.py
Это отбрасывает меня в подсказку pdb, откуда я могу c
продолжить выполнение, а когда он попадает в ошибку, я могу проверить переменные, а затем q
завершить выполнение script, чтобы вернуться в свою оболочку.
Я пробовал то же самое с модулем отладчика iPython, так как он более яркий:
$ python3 -m ipdb my_script.py
Тем не менее, я не могу выйти из отладчика, как только закончу проверку ошибки. Использование команды q
quit просто переключает ее между повторным выполнением режима script и post-mortem:
$ python3 -m ipdb my_script.py
ipdb> c
Uncaught exception. Entering post mortem debugging
Running 'cont' or 'step' will restart the program
ipdb> Inspect some variables at this point
ipdb> q
Post mortem debugger finished. The my_script.py will be restarted
ipdb> q
Uncaught exception. Entering post mortem debugging
Running 'cont' or 'step' will restart the program
ipdb> q
Post mortem debugger finished. The my_script.py will be restarted
ipdb> q
Uncaught exception. Entering post mortem debugging
Running 'cont' or 'step' will restart the program
ipdb> q
Post mortem debugger finished. The my_script.py will be restarted
ipdb> q
Uncaught exception. Entering post mortem debugging
Running 'cont' or 'step' will restart the program
Как выйти из этого отладчика?
Это была ошибка в IPython 5.1. Это было исправлено в этом запросе на получение и больше не является проблемой с IPython 5.2 и выше. Теперь вы можете использовать q
, quit()
или Ctrl + d для выхода из отладчика.
Как прокомментировал пользователь @ffeast, существует открытая проблема ipdb, и предлагается несколько обходных путей. Для меня это сработало хорошо:
kill %1
(или любой другой номер задания)ipdb> import os; os._exit(1)
ipdb> import os; os._exit(1)
Используйте ctrl + z или откройте второй терминал, затем найдите процесс (ps -ax | grep python
) и ps -ax | grep python
процесс.
Шаг за шагом:
Получить доступ к терминалу:
ssh server
(используйте опцию B или C, чтобы вы могли открыть второе соединение для выполнения команды) Ищите соответствующий PID
Python процесса ps -ax | grep python
ps -ax | grep python
. Например, идентификатор процесса для моего процесса (python my_stucked_process.py
) будет 112923
:
3085 tty1 Sl+ 15:53 /usr/bin/python /usr/bin/x-terminal-emulator
112923 pts/2 Tl 0:01 python my_stucked_process.py
113118 pts/2 S+ 0:00 grep --color=auto python
kill -9 112923
@tutuDajuju предложил использовать ctrl + z, но их предложение только отправит процесс на задний план (он все еще будет существовать, потребляя память). Вы должны сделать выше, чтобы действительно убить процесс