parsePlotSens.py -s bw hehe
を実行すると、hehe
は認識されない引数であると表示されます。ただし、parsePlotSens.py hehe -s bw
を実行すれば問題ありません。理想的には、両方のケースで機能することを望みます。
任意のヒント?以下は私のコードです:
if __name__ == '__main__' :
parser = argparse.ArgumentParser(prog='parsePlotSens');
parser.add_argument('-s', '--sort', nargs =1, action = 'store', choices = ['mcs', 'bw'], default='mcs', help=sorthelp)
parser.add_argument('filename', nargs ='+', action = 'store')
option = parser.parse_args(sys.argv)
sys.argv
の引数としてparse_args
を渡さないでください。使うだけ
option = parser.parse_args()
sys.argv
をparse_args
に渡すと、スクリプト自体のパスまたは名前がsys.argv
の最初の項目になるため、option.filename
の値になります。 hehe
は未知の引数になります。
sys.argv
を省略すると、parse_args
はsys.argv
を期待どおりに解析します。
未知の引数を許可することでこれを回避できます
交換
args = parser.parse_args()
と
args, unknown = parser.parse_known_args()
また、unutbuの答えを補完するものとして、このように辞書に引数を保存すると、テストが簡単になります。
args = vars(parser.parse_args())
print args
辞書を印刷します。
{'sort': ['bw'], 'filename': ['hehe']}
のような:
if args['sort'] == 'bw':
# code here
...
これを完了するために answer ここで、未知の引数を取得して解析する例を示します。
import argparse
parser = argparse.ArgumentParser()
# we only have a know argument as key-pair --known KNOWN
parser.add_argument('--known')
# test with known un unknown variables
args, unknown = parser.parse_known_args(["--known", "var", "--unknown", "bar", "--flag"])
unknown
は["--unknown", "bar", "--flag"]
のようなリストを返します。解析するだけです。
keypairs = dict([unknown[i:i+2] for i in range(0, len(unknown), 1) if unknown[i].startswith("--") and not (unknown[i+1:i+2]+["--"])[0].startswith("--")])
flags = [unknown[i] for i in range(0, len(unknown), 2) if (unknown[i+1:i+2]+["--"])[0].startswith("--")]
私の状況は質問と同じではありませんが、エラーは同じです。
私の状況:
pythonコマンドには、bashファイルで_\
_のような改行があります。
_python args_config.py \
--arg1="hello" \
--arg2="world"
_
_python argparse: unrecognized arguments
_ args not foundエラーが発生します。
問題は、bashファイルの改行がWindowsとLinuxで異なることです。
pycharm File -> Line Separators -> LF - Unix and OS X (\n)
で設定するだけ
linuxにアップロードしてbashファイルを実行すると動作します!