私はそれから引数を抽出するためにargparseモジュールを使用しようとしているが、素朴な実装はPythonインタプリタと呼ばれる障害が発生した場合:Pythonのargparse
1 import argparse
2 import sys
3
4 parser = argparse.ArgumentParser(description="some test program")
5 parser.add_argument('--some-option', action="store", dest="some_option")
6
7 parsed_args = parser.parse_args(sys.argv)
8 print(vars(parsed_args)
それが検出されるため失敗スクリプトの名前として最初の引数 - この場合は「test.py」:
~$: python3 ./test.py --some-option=5
usage: test.py [-h] [--some-option INPUT]
test.py: error: unrecognized arguments: ./test.py
私は、現時点では発見したソリューションはarugmentsからPythonスクリプト名を検索し、削除することですが、これはそうです不愉快なハックのように、最初の議論が正当なものであれば問題を抱えていますこれは一部ですので、私はintepreterへの呼び出しを取り除くことはできません。
1 import argparse
2 import sys
3
4 parser = argparse.ArgumentParser(description="some test program")
5 parser.add_argument('--some-option', action="store", dest="some_option")
6
7 print(sys.argv)
8 if sys.argv[0].find('.py') != -1:
9 args = sys.argv[1:]
10 else:
11 args = sys.argv
12
13 parsed_args = parser.parse_args(args)
14 print(vars(parsed_args)
argparse
注意を使用するときに厄介なPythonのファイル名を取り除くために良い方法はあります:imatelyはPythonのファイルでありますクロスプラットフォームのビルドシステムでは、python3またはpython3.exeに応じてpython実行ファイルをOSに応じて設定するmakefileがあります。
あなたは正しいです。私はあなたがスクリプトを直接呼び出すと、sys.argvの引数としてpythonスクリプトを持っていないと思っていましたが、もちろんPythonデザイナーはスマートな人です..... – sdfgeoff