Django - where put argparse command to modify -h option?
我想在我创建的项目中修改我的帮助选项。
我将argparse放到manage.py文件中,就像这样
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | parser = argparse.ArgumentParser( description="Some desc", formatter_class=argparse.RawTextHelpFormatter ) args = parser.parse_args() print(args) if __name__ =="__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE","Reporter.settings") try: from django.core.management import execute_from_command_line except ImportError: # The above import may fail for some other reason. Ensure that the # issue is really that Django is missing to avoid masking other # exceptions on Python 2. try: import django except ImportError: raise ImportError( "Couldn't import Django. Are you sure it's installed and" "available on your PYTHONPATH environment variable? Did you" "forget to activate a virtual environment?" ) raise execute_from_command_line(sys.argv) |
但是当我运行python manage.py -h时,它可以正常工作(帮助显示),但是当我运行
如何解决这个问题呢?我真的不知道如何修改-h选项。
在这个django项目中,我应该在哪里放置argparse代码以获取帮助?我知道我可以使用自己的命令,但是对我来说重要的是在我创建
之后获得帮助
编辑:
在评论帮助下,我创建了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | #!/usr/bin/env python def help_parser(): import argparse parser = argparse.ArgumentParser("Some desc", formatter_class=argparse.RawTextHelpFormatter ) args = parser.parse_args() print(args[0]) def main(): import os os.environ.setdefault("DJANGO_SETTINGS_MODULE","Reporter.settings") try: from django.core.management import execute_from_command_line except ImportError: # The above import may fail for some other reason. Ensure that the # issue is really that Django is missing to avoid masking other # exceptions on Python 2. try: import django except ImportError: raise ImportError( "Couldn't import Django. Are you sure it's installed and" "available on your PYTHONPATH environment variable? Did you" "forget to activate a virtual environment?" ) raise execute_from_command_line(sys.argv) if __name__ =="__main__": import sys if sys.argv[1] == '-h': help_parser() else: main() |
根据讨论添加新答案。
通过将
然后
1 2 3 4 5 6 | if __name__ =="__main__": import sys if len(sys.argv) == 2 and sys.argv[1] == '-h': help_parser() else: main() |
其中main()包含标准的django manage.py代码。请注意,您实际上并不需要argparse,因为现在help_parser()仅显示应用程序的帮助消息,而无需执行其他任何操作。
您可能不应该在这里将argparse引入图片。如果您正在编写django CLI,则Argparse和Argh非常有用,但是对于添加自定义管理命令不是很有帮助,因为管理api已经以不同的方式建立了大多数已内置的需求。
例如,仅通过将.py文件放在正确的位置,您就可以自动使您的命令在执行
1 | myapp/management/commands/custom.py |
执行manage.py -h将显示
1 2 | [myapp] custom |
您可以通过设置帮助变量来进一步自定义它。
1 2 | class Command(BaseCommand): help = 'Custom help message here' |
现在./manage.py自定义-h将显示(以及其他内容)
1 | Closes the specified poll for voting |