【问题标题】:Python VS Code Debug - Capture SIGTERM?Python VS 代码调试 - 捕获 SIGTERM?
【发布时间】:2018-11-15 17:59:58
【问题描述】:

我想在 python 调试器停止时强制sys.exit()。当我停止调试器时,我看到Terminated: 15,所以我认为这是SIGTERM。但是,停止调试器时,我的 kill 函数没有被调用。

def kill(sig, frame):
  sys.exit(0)

signal.signal(signal.SIGINT, kill)
signal.signal(signal.SIGTERM, kill)

停止vscode调试器时,发送什么信号?

编辑:

刚刚尝试了所有这些。没有爱

for s in signal.Signals:
  try:
    signal.signal(s, self._kill)
  except:
    pass

【问题讨论】:

  • SIGHUP or SIGSEGV or SIGSTOP?
  • @Torxed 不走运
  • this 看看是否有什么触发?编辑了我的第一条评论,我认为是SIGSTOP
  • 您是否在 kill 函数中添加了打印语句或其他内容,或者尝试使用 python -m trace --trace script.py 执行它(如果可以通过您使用的调试器)?只是为了看看是否有任何信号处理痕迹发生?老实说,我不知道 Visual Studio Code 在做什么,我想也没有太多关于此事的文档(毕竟它是相当新的)。

标签: python visual-studio-code


【解决方案1】:

现在我们似乎是 OOL(不走运) - 我遇到了同样的问题,发现 VS Code python 扩展确实在调试停止时发出了 SIGKILL,这是无法咳嗽的。

与 node.js 扩展不同,Python 扩展也不支持将类型设置为 SIGTERM 或 SIGINT。

我发现的唯一解决方法是在 VS Code 中打开一个终端(类型:Pythen 调试终端)。它应该在调试期间显示 python 命令行为和输出。通过单击终端并手动按 ctrl-C 使终端成为焦点。这应该会优雅地停止调试的程序,并且您可以捕获 SIGTERM 或 SIGINT。

【讨论】:

  • 我尝试了您建议的解决方案,但没有运气。 Ctrl-C 未被捕获,我的 Pytrhon 程序继续执行。
  • 这是一个大错误。这也不允许清理临时目录/文件。
猜你喜欢
  • 2018-11-19
  • 2023-03-29
  • 2021-10-31
  • 2018-12-15
  • 2019-05-08
  • 2019-05-14
  • 1970-01-01
  • 2022-11-04
  • 1970-01-01
相关资源
最近更新 更多