Django - 在哪里放置 argparse 命令来修改 -h 选项?
Django - where put argparse command to modify -h option?
我想修改我创建的项目中的帮助选项。
我把 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()
你可能不应该在此处引入 argparse。如果您正在编写 ,Argparse 和 Argh 非常有用,但对于添加自定义管理命令不是很有帮助,因为管理 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 自定义 -h 将显示(除其他外)
Closes the specified poll for voting
根据讨论添加新答案。
您可以通过将 __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() 仅显示您的应用程序的帮助消息,没有任何其他事情可做。
我想修改我创建的项目中的帮助选项。 我把 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()
你可能不应该在此处引入 argparse。如果您正在编写
例如,您只需将 .py 文件放在正确的位置,即可在执行 ./manage.py -h
时自动显示您的命令。例如,如果您将文件创建为
myapp/management/commands/custom.py
执行manage.py -h 会显示
[myapp]
custom
您可以通过过度设置帮助变量来进一步自定义它。
class Command(BaseCommand):
help = 'Custom help message here'
现在 ./manage.py 自定义 -h 将显示(除其他外)
Closes the specified poll for voting
根据讨论添加新答案。
您可以通过将 __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() 仅显示您的应用程序的帮助消息,没有任何其他事情可做。