それはあなたが求めているものを理解するために少し難しいですが、私は、これはあなたが望むかもしれないと思う:あなたは、コマンドライン引数を管理するためにargparseを使用する場合
Argcomplete
のみ動作します。あなたの例argComp.py
については
は、あなたが使用方法の詳細
python argComp.py -h
を印刷するには
python argComp.py --name Korea --name2 LA
を入力してargComp.py
を実行することができ、この
#!/usr/bin/env python
# PYTHON_ARGCOMPLETE_OK
import argcomplete, argparse
parser = argparse.ArgumentParser(description='Test passing arguments')
parser.add_argument('--name1', metavar='NAME1', nargs=1, choices=['Korea', 'Seoul'], help="First address line")
parser.add_argument('--name2', metavar='NAME2', nargs=1, choices=['USA', 'LA'], help="Second address line")
argcomplete.autocomplete(parser)
args = parser.parse_args()
# Your code here
# Print the arguments
print(args.name1[0],"-",args.name2[0])
のようなものでなければなりませんあなたはそれが完全に動的になりたい場合は、環境変数
として渡しjson
形式で引数を格納することができますし、我々がする
'{"name1": {"address": ["korea", "Seoul"], "gender": ["Male","Female"]}, "name2": {"address": ["USA", "LA"]} }'
(JSON形式)私たちは、以下のデータを解析したいと言うことができます環境変数に格納し、端末内にその名前をそれPY_ARGS
をすることができます:もちろん
$ PY_ARGS='{"name1": {"address": ["korea", "Seoul"], "gender": ["Male","Female"]}, "name2": {"address": ["USA", "LA"]} }'
$ export PY_ARGS
をあなたが別のPROGRA、すなわちしたい任意の場所からこの環境変数を設定することができますm。
今私達のプログラムargComp.py
は、今、私たちはこれがエラーに
を出力します
argComp.py
$ ./argComp.py name1 --gender Male
Namespace(address=None, gender=['Male'], subparser='name1')
または住所
$ ./argComp.py name1 --gender Male --address korea
Namespace(address=['korea'], gender=['Male'], subparser='name1')
を実行することができます
import argcomplete, argparse
import os
import json
args = os.environ['PY_ARGS'] # get the environment variable
# Parse env variable to dictionary
args_dict = json.loads(args)
# create the top-level parser
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(dest='subparser')
# Get keys as list
top_level_keys = list(args_dict.keys()) # [name1, name2]
for i in range(0,len(top_level_keys)):
key = top_level_keys[i] # when i=0 name1
sub_dict = args_dict[key] # when i=0 {"address": ["korea", "Seoul"], "gender": ["Male","Female"]}
sub_parser = subparsers.add_parser(key)
sub_level_keys = list(sub_dict.keys()) # when i=0 [address, gender]
for k in range(0, len(sub_level_keys)):
sub_key = sub_level_keys[k] # when k=0 address
choices = sub_dict[sub_key] # when k=0 [korea, Seoul]
sub_parser.add_argument('--'+sub_key, nargs=1, choices=choices)
argcomplete.autocomplete(parser)
args = parser.parse_args()
# Your code here
print(args)
になります
ヘルプがうまく
$ ./argComp.py -h
usage: argComp.py [-h] {name1,name2} ...
positional arguments:
{name1,name2}
optional arguments:
-h, --help show this help message and exit
と
$ ./argComp.py name1 -h
usage: argComp.py name1 [-h] [--gender {Male,Female}]
[--address {korea,Seoul}]
optional arguments:
-h, --help show this help message and exit
--gender {Male,Female}
--address {korea,Seoul}
ここにトリックはあなたのJSON文字列から辞書を作成し、subparser(s)を追加することですが印刷されています。
必要な引数構造に合わせてサブレベルを追加できます。
ありがとうございます。しかし、データセットがない場合は、私は意味します。どのように私はバッファ内の議論を得ることができ、私は[Enter]の前に[TAB]を押すとリアルタイムでデータをチェックするためにこの引数を使用することができます...あなたの例は絶対パスです。私のデータセットは単なる例です。 –
@HyunjunCheongは私の編集をチェックします。私はこれがあなたが望むものだと思う – MMayla