2016-11-30 6 views
1

作成したプロジェクトでヘルプオプションを変更したいと思います。 私はこのDjango - argparseコマンドを-hオプションに変更するには?

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) 

のように、manage.pyファイルにargparse置くが、それは正しく動作-h私が(ヘルプ番組)のpython manage.pyを実行しますが、私はpython manage.py runserverを実行したときに、私が得たとき:manage.py: error: unrecognized arguments: runserver どのようにしこの問題を解決します?私は本当に-hオプションを変更する方法を知らない。

このdjangoプロジェクトの助けを借りるには、どこにargparseコードを入れますか?おそらく

#!/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

:私は、私は自分のコマンドを使用することができます知っているが、それは私がpython manage.py -h

EDIT行った後に助けを得るために私にとって重要である:コメントから助けた後

を、私が作成しましたここに画像にargparseを導入してはいけません。 ArgparseとArghは、django CLIを書いていても、カスタム管理コマンドを追加するのにはあまり役に立ちませんが、管理APIにはすでに非常に異なる方法で作成されているほとんどの要件があるため、非常に便利です。

たとえば、適切な場所に.pyファイルを置くだけで、./manage.py -hが実行されると、自動的にコマンドが表示されます。たとえば、あなたはmanage.py -hを実行

myapp/management/commands/custom.py 

としてファイルを作成する場合は、ヘルプ変数を設定超えることにより、さらにそれをカスタマイズすることができ

[myapp] 
    custom 

を明らかにします。 (他のものの間で)明らかにする-h

class Command(BaseCommand): 
    help = 'Custom help message here' 

今./manage.pyカスタムの議論に基づいて、新しい答えを追加

Closes the specified poll for voting 
+0

わかりました。しかし、誰かが自分のアプリに追加するモジュールをインストールしていない場合はどうでしょうか?次に、manage.py custom -hにヘルプは表示されず、エラーの一覧が表示されます。エラーが表示されても、どのようにヘルプを表示できますか? – allocer

+0

あなたが実際に作成しようとしていることは、ジャンゴのWebアプリケーションではなく、Django CLIアプリケーションだと思っています。 – e4c5

+0

私はrequirements.txtを持っていることを知っています。このアプリの話はもっと複雑です。これは私の研究アプリであり、教師は、エラーのリストが表示されても助けを求めるべきだと言った。私はそれが愚かだと知っていますが、私はそれが不可能であることを確実にしたいです。さて、最善の方法は、最初にすべてのモジュールを要件からインストールして、カスタムヘルプコマンドを呼び出すことです。 – allocer

1

__main__ブロックの下にあるものを別の機能に移動することで、教師を幸せに保つことができます。したがって、manage.pyに2つの関数があります。最初の引数は引数が-hのときに呼び出され、2つ目の引数はそれ以外の場合に呼び出されます。 manage.pyのすべてのインポートがトップレベルではなく、それらの関数の内部にも移動されていることを確認してください。

そして

if __name__ == "__main__": 
    import sys 
    if len(sys.argv) == 2 and sys.argv[1] == '-h': 
     help_parser() 
    else: 
     main() 

場合、メイン()標準のDjango manage.pyコードを含んでいます。 help_parser()はあなたのアプリのヘルプメッセージを表示するだけなので、ここではargparseは必要ないことに注意してください。

+0

ええ、ありがとう;) – allocer

+0

あなたのプロジェクトでは、すべての最高の助けになってうれしい – e4c5

関連する問題