私はをPython 3で使用して、コマンドライン引数をスクリプトに受け入れます。Python 3でargparseで複数のオプション引数を選択
import argparse
cli_argparser = argparse.ArgumentParser(description='')
cli_argparser.add_argument('-n', '--number', type=int, help="Pass a number 'n' to script.", required=False)
cli_argparser.add_argument('-q', '--query', help="Pass a query to the script", required=False)
cli_argparser.add_argument('-o', '--outfile', help="Saves the output to an external file.", required=False)
cli_args = cli_argparser.parse_args()
if (cli_args.number):
print ("\n--number has the value '" + str(cli_args.number) + "'\n")
elif (cli_args.query):
print ("\n--query has the value '" + cli_args.query + "'\n")
elif (cli_args.outfile):
print ("\n--output has the value '" + cli_args.outfile + "'\n")
else:
print ("\nNo Arguments passed. Set or Use a default value...\n")
特定の引数が1つ選択されている場合は、別のものを指定する必要がありますか?たとえば、-o
が指定されている場合は、-n
の前または後に-o
を含める必要があります。
ようなので、私は、if
条件を追加しようとした:
if (cli_args.number):
print ("\n--number has the value '" + str(cli_args.number) + "'\n")
elif (cli_args.query):
print ("\n--query has the value '" + cli_args.query + "'\n")
elif (cli_args.outfile):
if (cli_args.number):
print ("\n--output has the value '" + cli_args.outfile + "'\n")
else:
print ("\n--number not specified. Exit..")
else:
print ("\nNo Arguments passed. Set or Use a default value...\n")
結果は、唯一-o
が指定されている場合-n
が追加された場合、スクリプトは、しかし、(予想通り)から出ることが第一条件であります真です。
$ python test.py -o output.txt
--number not specified. Exit..
$ python test.py -o output.txt -n 100
--number has the value '100'
にはどうすればいいだけ-n
が指定されている場合、第一の条件が真であると-o
が指定されている場合、それはあまりにも-n
を必要とし、その後、第三の条件を実行し、このように変更しますでしょうか? cli_args.number AND cli_args.outfile
のようなものでしょうか?それとも、に内蔵機能がありますか?
はい、あなたの 'と'は動作しますが、あなたが 'if'チェーンの最初の条件であることを確認する必要があります。代わりにあなたの現在のコードをとり、' outfile'ブロックを先頭に移動してください –
'argparse ''包括的な 'テストはありません。構文解析後のテストは、引数が任意の順序で発生する可能性があることを考慮すると、うまくいきます。デフォルトの 'None'がコマンドラインに現れないので' 'None''は良いテストです。 – hpaulj