Python args: отладочная аргумент django, настроенная для django manage.py - PullRequest
0 голосов
/ 29 ноября 2018

Я хочу включить отладку с помощью средства отладки Visual Studio, ptvsd.Используя это, я должен присоединить отладчик к приложению, используя

ptvsd.enable_attach(address=(settings.REMOTE_URL, settings.DEBUG_PORT), redirect_output=True)
ptvsd.wait_for_attach()

Использование ptvsd означает, что я не могу использовать многопоточность и перезагрузку, поэтому я добавляю аргументы

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

Для удобствавключить отладку Я создал аргументы для выполнения этих строк кода.Я создал именованный аргумент 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, он сообщает нераспознанные аргументы для runserver и 0:8000

, нужно ли мне включать все возможные djangoпозиционный аргумент parser?и как это сделать с 0:8000?добавить все возможные порты?Является ли использование именованного аргумента нежизнеспособным для этого случая?

1 Ответ

0 голосов
/ 29 ноября 2018

Так что, очевидно, я могу использовать parser.parse_known_args(), все будет хорошо, когда есть нераспознанные аргументы.и поскольку я хочу --debug в качестве флага, я добавляю action='store_true' в add_argument, чтобы он возвращал 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)

Теперь все работает:)

...