我想在我创建的项目中修改我的帮助选项。 我把argparse放在manage.py文件中,就像这个
一样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时它运行正常(帮助显示),但当我运行python manage.py runserver
时,我得到了:manage.py: error: unrecognized arguments: runserver
如何解决这个问题呢?我真的不知道如何修改-h选项。
我应该在哪里放置argparse代码来获取这个django项目的帮助?我知道我可以使用自己的命令,但在我python manage.py -h
修改
在评论的帮助下,我创建了:
#!/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()
答案 0 :(得分:1)
你可能不应该在这里将argparse引入图片中。 Argparse和Argh非常有用,如果您正在编写django CLI但对添加自定义管理命令没有多大帮助,因为管理api已经构建了大部分要求,尽管方式非常不同。
例如,只需将.py文件放在正确的位置,即可自动执行命令,以便在执行./manage.py -h
时显示。例如,如果您将文件创建为
myapp/management/commands/custom.py
执行manage.py -h将显示
[myapp]
custom
您可以通过过度设置帮助变量来进一步自定义它。
class Command(BaseCommand):
help = 'Custom help message here'
现在./manage.py custom -h将揭示(除其他外)
Closes the specified poll for voting
答案 1 :(得分:1)
根据讨论添加新答案。
通过将__main__
块下的内容移动到单独的功能,您可以让老师高兴。所以你在manage.py
中有两个函数,第一个函数在参数为-h时调用,第二个函数在其他所有函数中调用。确保manage.py中的所有导入也移动到这些函数内部而不是位于顶层。
然后
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()只显示应用程序的帮助消息,而且没有其他任何操作。