Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

api to retrieve debugpy endpoint and access token?

未关闭
#1,529 2 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
5/5
预计耗时
一周以上
新手友好度
25/100
Issue 类型
功能
描述清晰度
基本清楚
活跃度
停滞
技术栈
python
领域
devtools

调研方向

首先检查 issue 中所示的 subprocess.Popen 场景和 debugpy.connect 的用法,然后跟踪 debugpy 如何处理子进程跟踪和连接细节。将所请求的公共 endpoint 和 access-token API 与针对 VS Code/debugpy 描述的现有行为进行比较。完成的标准是明确确定受支持的子进程方案或 API 要求,并涵盖外部进程的使用场景。

由索引模型根据 Issue 内容生成。

描述

I have a program which launches python subprocesses via python's subprocess module using an invocation syntax like:

subprocess.Popen("./path/to/script/with/pyshebangscript", ...])

Where pyshebangscript looks like this and is an auto-generated shim created by poetry from the [tool.poetry.scripts] pyproject.toml section.

#!/app/pypoetry/virtualenvs/appname--PefSXhl-py3.10/bin/python
import sys
from zephyrus.cli import app

if __name__ == '__main__':
    sys.exit(app())

AFAICT this mechanism for invoking the sub process defeats the default subProcess: true tracking behavior in debugpy.

I found a workaround which appears to work wherein I explicitly reconnect the subprocess back to the original debugging session (here I'm assuming that os.environ is exported from parent to child process so that the env variables updated below propogate information to the subprocess).

I put this code in my project's root most __init__.py file

import os

DEBUGPY_ENDPOINT = os.environ.get("DEBUGPY_ENDPOINT", None)
USE_DEBUGPY = os.environ.get("USE_DEBUGPY", None)

if USE_DEBUGPY is not None and DEBUGPY_ENDPOINT is not None:
    import debugpy

    debugger_host, debugger_port = os.environ["DEBUGPY_ENDPOINT"].split(":")
    print(f"Connecting to debugpy host process on {debugger_host}:{debugger_port}")
    debugpy.connect(
        (debugger_host, int(debugger_port)), access_token=os.environ["DEBUGPY_TOKEN"]
    )
    debugpy.wait_for_client()
    print("Connected to debugger process")

if USE_DEBUGPY is not None and DEBUGPY_ENDPOINT is None:
    import debugpy

    def get_debugger_endpoint():
        import os
        import psutil

        parent_pid = os.getppid()  # Get parent process ID
        parent = psutil.Process(parent_pid)

        parent_cli = parent.cmdline()
        debugpy_endpoint = parent_cli[3]
        debugpy_token = parent_cli[7]

        return debugpy_endpoint, debugpy_token

    debugger_endpoint = get_debugger_endpoint()
    os.environ["DEBUGPY_ENDPOINT"], os.environ["DEBUGPY_TOKEN"] = debugger_endpoint
    print(f"Debugger endpoint found at {debugger_endpoint}")

The above snippet includes some hacky logic to detect the debugpy endpoint and access_token from the original process's parent process's cli arguments ...

So with that context - I suppose I have a two part question here.

FIrst -- is there a good way to change the subprocess.Popen invocation that wouldn't defeat the built in subprocess tracking logic in vscode/debugpy?

Second -- if I do need to do something like above to get this working properly, would it be possible to add something to the public api of debugpy to make it easy to directly observe the endpoint and access token associated with a connected process? Retrieving these values is needed so that these values can be passed along from the originally debugged process to the subprocess(es) it launches -- where those subprocesses will in turn debugpy.connect() back to the active debugging session.

I think a mechanism to observe these values would be useful even if there's a better way to handle this exact problem, as I believe the logic above would work for subprocesses that get launched on remote hosts as well. I do this on my system as these subprocesses may also execute inside of cloud run jobs ... To get the experience I want (pausing on breakpoints on code executing a cloud run job) -- I think all I will need to figure out is how to get vscode's debugpy debugger type to support connections from external network's (rather than binding the debug server port to the default 127.0.0.1 only).

主要语言
Python
星标
2.5k
派生
202
平均合并
5 天 1 小时
30 天内合并 PR
1

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

microsoft/debugpy 的其他 Issue

查看 microsoft/debugpy 的全部 Issue

相似的 Issue

更多 Python Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。