2016-03-27 2 views
2

Ubuntu 14.04 LTSにファイルargComp.pyがあります。 argcomplete 1.0.0モジュールを正常にインストールします。ENTERの前にオートコンプリート引数を取得するにはどうすればよいですか?

chmod +x argComp.py 

、その後

data = [ name1 : { address1 : [Korea, Seoul ] }, name2 : { address2 : [ USA, LA ] } ] 

./argComp.py --name [tab] 

./argComp.py --name 
name1 name2 

./argComp.py --name name1 --address [tab] 
Korea Seoul 

私は、ユーザーがをENTERを押す前に、リアルタイムで私の議論を読んで欲しいです。このため、argcompleteモジュールはという名前の--name name1に読み込み、データをname1でチェックする必要があります。

データを取得して--addressリストを作成できますか?

私は助ける、事前にあなたに感謝してください

..ブラウザのリアルタイムのファイルにこの概念を実装したいです。

答えて

0

それはあなたが求めているものを理解するために少し難しいですが、私は、これはあなたが望むかもしれないと思う:あなたは、コマンドライン引数を管理するために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)を追加することですが印刷されています。

必要な引数構造に合わせてサブレベルを追加できます。

+0

ありがとうございます。しかし、データセットがない場合は、私は意味します。どのように私はバッファ内の議論を得ることができ、私は[Enter]の前に[TAB]を押すとリアルタイムでデータをチェックするためにこの引数を使用することができます...あなたの例は絶対パスです。私のデータセットは単なる例です。 –

+0

@HyunjunCheongは私の編集をチェックします。私はこれがあなたが望むものだと思う – MMayla

関連する問題