Python args:为 django 设置的 django 调试 arg manage.py

Python args: django debugging arg set up for django manage.py

我想使用 visual studio 调试工具 ptvsd 启用调试。使用它我必须使用

将调试器附加到应用程序
ptvsd.enable_attach(address=(settings.REMOTE_URL, settings.DEBUG_PORT), redirect_output=True)
ptvsd.wait_for_attach()

使用 ptvsd 意味着我不能使用线程和重新加载,所以我附加了 args

sys.argv.append("--nothreading")
sys.argv.append("--noreload")

为了方便启用调试,我创建了一个 args 来执行这些代码行。我创建了命名参数 debug

if __name__ == "__main__":
    #previous line omitted
    parser = argparse.ArgumentParser()
    parser.add_argument("--debug", help="enable debugging through vscode")
    args = parser.parse_args()
    if args.debug:
        sys.argv.append("--nothreading")
        sys.argv.append("--noreload")
        ptvsd.enable_attach(address=(settings.REMOTE_URL, settings.DEBUG_PORT), redirect_output=True)
        ptvsd.wait_for_attach()
    execute_from_command_line(sys.argv)

我想要实现的是,当我想调试我的应用程序时,我使用命令 python manage.py runserver 0:8000 --enable-debugging 当我只想 运行 我的应用程序时,我使用 python manage.py runserver 0:8000

但是当我尝试 运行 使用时 returns 出现错误 python manage.py runserver 0:8000 它说 runserver0:8000

无法识别的参数

这样一来,我是否必须将所有可能的 django 位置参数包含在 parser 中?以及如何用 0:8000 做到这一点?添加所有可能的端口? 在这种情况下使用命名参数不可行吗?

所以显然我可以使用 parser.parse_known_args(),当有无法识别的参数时应该没问题。因为我想要 --debug 作为标志,所以我在 add_argument 中添加了 action='store_true',所以只要参数存在,它就会 returns 为真。

有了它,我可以通过使用它来解决这个问题,然后在将它传递给 execute_from_command_line 时删除 --debug 参数。像这样:

if __name__ == "__main__":
    #previous line omitted
    parser = argparse.ArgumentParser()
    parser.add_argument("--debug", action='store_true', help="enable debugging through vscode")
    args = vars(parser.parse_known_args()[0])
    if args.debug:
        sys.argv.append("--nothreading")
        sys.argv.append("--noreload")
        ptvsd.enable_attach(address=(settings.REMOTE_URL, settings.DEBUG_PORT), redirect_output=True)
        ptvsd.wait_for_attach()
    execute_from_command_line(sys.argv)

现在可以了:)