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

时间:2018-11-29 03:42:12

标签: python django arguments ptvs

我想使用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

但是当我尝试使用运行时它返回一个错误 python manage.py runserver 0:8000表示runserver0:8000

无法识别的参数

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

1 个答案:

答案 0 :(得分:0)

因此,显然我可以使用parser.parse_known_args(),当存在无法识别的参数时应该没问题。并且因为我希望将--debug作为标志,所以我在add_argument中添加了action='store_true',以便只要存在该参数它就返回true。

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

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)

现在可以使用了:)