В VSCode отладчик Python запускает новый терминал каждый раз, когда я отлаживаю

При отладке в Python в VS Code каждый раз при отладке создается новый терминал. Код просто продолжает добавлять терминал каждый раз в раскрывающийся список в окне терминала. Мне приходится вручную удалять каждый терминал или через какое-то время удалять их кучу — иначе Код в конце концов зависнет.

Есть ли параметр, чтобы остановить это? Это ожидаемое поведение или дефект?


Обновление: на снимке экрана показано, что происходит, когда каждый раз создается новый терминал отладки. Это раскрывающийся список в правой части окна терминала, который вы можете открыть или перейти с помощью ctrl-` (клавиша гравировки, тильда без смещения или клавиша ~). Он показывает обычный терминал bash, терминал Python, который повторно используется каждый раз, когда вы запускаете скрипт, но 3 окна Python Debug Console. Новая Консоль отладки Python создается каждый раз при отладке (F5). Поэтому мне нужно входить и вручную удалять консоль отладки Python (нажимая значок мусорной корзины справа) каждый раз, когда я отлаживаю. Это открывало до 20+ окон терминала, прежде чем я понял, что это происходит.

введите здесь описание изображения


person LightCC    schedule 02.10.2019    source источник
comment
1) Щелкните правой кнопкой мыши код python 2) щелкните Запустить файл python в терминале. Вы можете назначить сочетание клавиш в настройках сочетаний клавиш.   -  person Gobrisebane    schedule 22.07.2020
comment
Привет @Gobrisebane - это просто запустит файл, а не запустит отладчик (например, Меню: «Выполнить» -> «Начать отладку»)   -  person LightCC    schedule 22.07.2020


Ответы (1)


Реальное решение: заставить терминал выйти после этого!

Наконец-то увидел реальное решение этой проблемы (ну, немного хакерское), в этом ответе - по крайней мере, если вы используете Git Bash в качестве терминала по умолчанию.

Если вы добавите аргументы && и exit в конфигурацию отладки, терминал отладки автоматически закроется после завершения вашей программы. Однако будьте осторожны, он немедленно закроет терминал и весь текст в нем (вам может потребоваться добавить «Нажмите любую клавишу, чтобы завершить программу» в конце вашего скрипта, чтобы дать вам время просмотреть любой текст или что-то в этом роде) .

Примечание. Это по-прежнему хак, и он не всегда работает. Если вы нажмете кнопки перезапуска или остановки на панели инструментов отладчика, этот метод будет сокращен.

&& в основном говорит Bash остановиться и дождаться завершения задачи отладки, прежде чем продолжить с дополнительными командами, а затем exit выполнится после завершения сеанса отладки, что закроет терминал.

Вы можете сделать это, открыв конфигурацию запуска/отладки следующим образом:

  1. Перейдите в окно «Выполнить» на боковой панели.
  2. Выберите конфигурацию запуска в раскрывающемся списке, затем нажмите шестеренку, чтобы открыть соответствующий файл launch.json в окне редактора.

введите здесь описание изображения

  1. Добавьте строку для args: ["&&", "exit"], как показано ниже, и УБЕДИТЕСЬ, ЧТО ВЫ ДОБАВИЛИ ЗАПЯТУЮ В КОНЦЕ СТРОКИ ВЫШЕ!!

запуск.json:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Current File",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal",
            "args": ["&&", "exit"]
        }
    ]
}

ПРИМЕЧАНИЕ 1: комментарий к этому ответу означает, что вы можете попробовать "args": ["\n", "exit", "0"], если это не сработает. Вероятно, это связано с другим типом терминала (Windows Cmd Prompt, PowerShell, другой оболочкой Linux и т. д.).

ПРИМЕЧАНИЕ 2. Если вам нужно добавить другие аргументы, вы можете добавить их в виде строк перед аргументом && в списке. Элементы, размещенные ранее в списке, станут аргументами вашей фактической программы/скрипта.



Альтернативное (оригинальное) решение: используйте консоль отладки для вывода

После некоторых поисков я не могу определить, ожидается ли запуск нового терминала для каждой отладки, но есть обходной путь.

Настройте конфигурацию отладки для Python: Current File. На вкладке отладки вверху нажмите на значок шестеренки, чтобы открыть файл launch.json.

Примечание. Значок отладки ниже немного изменился, и эта вкладка теперь называется Run вместо Debug< /эм>

введите здесь описание изображения

В launch.json измените параметр "console" со значения по умолчанию "integratedTerminal" на "internalConsole", как показано ниже:

{   "version": "0.2.0",
    "configurations": [
        {   "name": "Python: Current File",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "internalConsole"
        }
    ]
}

Это приведет к тому, что все выходные данные любого сеанса отладки будут происходить только в КОНСОЛИ ОТЛАДКИ, которая очищается и повторно используется в каждом сеансе, а не порождает новый интегрированный терминал в каждом сеансе.


Обратная сторона

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

В этом случае вам просто нужно постоянно удалять лишние сеансы отладки - немного боли.

person LightCC    schedule 02.10.2019
comment
Я зарегистрировал проблему/дефект в опции integratedTerminal, каждый раз порождающей новый терминал, и он находится в очереди здесь: github.com/microsoft/ptvsd/issues/1850 - person LightCC; 25.10.2019