在VSCode中,Python调试器每次调试时都会启动一个新的终端

在VSCode中,Python调试器每次调试时都会启动一个新的终端,python,visual-studio-code,vscode-debugger,Python,Visual Studio Code,Vscode Debugger,在Python和VS代码中调试时,每次调试时都会创建一个新的终端。代码每次只是不断地将终端添加到终端窗口的下拉列表中。我必须手动删除每个终端,或者在一段时间后删除一堆终端,否则代码最终会挂起 是否有停止此操作的选项设置?这是预期行为还是缺陷 更新:这里是每次创建新调试终端时发生的情况的屏幕截图。这是终端窗口右侧的下拉列表,您可以使用ctrl-`(grave键、未移动的平铺或~键)打开或转到该窗口。它显示了正常的bash终端,这是一个Python终端,在每次运行脚本时都会被重用,但是3个Pyth

在Python和VS代码中调试时,每次调试时都会创建一个新的终端。代码每次只是不断地将终端添加到终端窗口的下拉列表中。我必须手动删除每个终端,或者在一段时间后删除一堆终端,否则代码最终会挂起

是否有停止此操作的选项设置?这是预期行为还是缺陷


更新:这里是每次创建新调试终端时发生的情况的屏幕截图。这是终端窗口右侧的下拉列表,您可以使用ctrl-`(grave键、未移动的平铺或~键)打开或转到该窗口。它显示了正常的bash终端,这是一个Python终端,在每次运行脚本时都会被重用,但是3个Python调试控制台窗口除外。每次调试(F5)时都会创建一个新的Python调试控制台。因此,每次调试时,我都需要进入并手动删除一个Python调试控制台(点击右侧的垃圾桶图标)。在我意识到这一点之前,已经打开了20多个终端窗口

一个真正的解决方案:让终端随后退出! 终于看到了一个真正的解决方案(好吧,有点黑),-至少如果您使用GitBash作为默认终端

如果在调试配置中添加参数
&&
exit
,调试终端将在程序结束后自动退出。但请注意,它会立即关闭终端和其中的所有文本(您可能需要在脚本末尾添加“按任意键结束程序”,以便有时间查看任何文本或类似内容)

注意:这仍然是一种黑客行为,并不总是有效-如果您点击调试器工具栏上的“重新启动”或“停止”按钮,它会成功 此方法的快捷方式

&&
基本上告诉Bash停止并等待调试任务完成,然后再继续执行其他命令,然后在调试会话结束后执行
退出
,从而关闭终端

您可以按如下方式打开运行/调试配置来完成此操作:

  • 转到侧边栏中的“运行”窗口
  • 在下拉列表中选择run配置,然后按下gear,这将在编辑器窗口中显示相应的
    launch.json
    文件
  • 如下图所示,为
    args:[“&&&”,“exit”]
    添加一行,并确保在该行上方的末尾添加逗号 launch.json:

    {
    //使用IntelliSense了解可能的属性。
    //悬停以查看现有属性的描述。
    //有关更多信息,请访问:https://go.microsoft.com/fwlink/?linkid=830387
    “版本”:“0.2.0”,
    “配置”:[
    {
    “名称”:“Python:当前文件”,
    “类型”:“python”,
    “请求”:“启动”,
    “程序”:“${file}”,
    “控制台”:“集成终端”,
    “参数”:[“&&”,“退出”]
    }
    ]
    }
    
    注意1:在该答案处留下的注释表示您可能希望尝试
    “args”:[“\n”,“exit”,“0”]
    ,如果不起作用。这可能适用于不同的终端类型(Windows Cmd提示符、PowerShell、不同的Linux shell等)

    注意2:如果需要添加其他参数,可以将它们作为字符串添加到列表中的“&&”参数之前。列表中前面放置的项将成为实际程序/脚本的参数



    替代(原始)解决方案:使用调试控制台进行输出 经过一些搜索之后,我无法确定是否需要为每个调试启动一个新的终端,但是有一个解决方法

    设置Python:Current文件的调试配置。在debug选项卡的顶部,单击gear图标打开launch.json

    注意:下面的调试图标稍有更改,此选项卡现在称为
    运行
    ,而不是
    调试

    在launch.json中,将
    “控制台”
    设置从默认的
    “integratedTerminal”
    更改为
    “internalConsole”
    ,如下所示:

    {“版本”:“0.2.0”,
    “配置”:[
    {“名称”:“Python:当前文件”,
    “类型”:“python”,
    “请求”:“启动”,
    “程序”:“${file}”,
    “控制台”:“内部控制台”
    }
    ]
    }
    
    这将导致任何调试会话的所有输出只发生在调试控制台中,该控制台在每个会话中被清除和重用,而不是在每个会话中生成新的集成终端


    缺点 最后,我返回到集成终端,寻找希望在控制台上进行用户输入的脚本,因为调试控制台不允许用户输入


    在这种情况下,您只需要不断删除额外的调试会话—这有点麻烦。

    我在
    integratedTerminal
    选项上提交了一个问题/缺陷,每次生成一个新的终端,它都在这里的队列中:1)右键单击python代码2)单击“在终端中运行python文件”您可以在键盘快捷键preferenceHi@Gobrisebane中指定快捷键,该快捷键只会运行文件,而不会启动调试器(即菜单:运行->开始调试)