2017-01-18 4 views
0

私が現在取り組んでいるアプリケーションでは、管理者が一種のコマンドラインにアクセスできる機能を追加したいと考えています。
これは代わりに、それは私が定義するテキストボックス内のキーワードを検索し、入力パラメータとそのリンクされた機能を実行し、実際のコマンドラインではありません。例えば
pythonのtkinterコマンドラインスタイルのアプリケーション

get user data: erikthered 

は...方法self.user_data('erikthered')を実行するだろうが、私はevalまたはexecのような厄介なものを使用せずに、エレガントにこのステップに取得する方法がわかりませんよ。
これらの機能は、理想的には、複数のパラメータのために働く必要があります。
この質問は主観的と考えられているが、私は本当に前にこのような何かをプログラムしていない、と私は他の人の洞察力を重視場合、私はお詫び申し上げます。

links = {'get users':'self.get_users(parameters)', 'get user data':'self.get_user_data(parameters)'} 

    terminal = self.terminal 
    line = str(terminal.index(INSERT).split('.')[0]) 
    #get index of line 

    line = terminal.get(line+'.0', line+'.end') 
    splitline = line.split(':') 

    command = splitline[0] 
    parameters = splitline[1].split(',') 
    exec(links[command]) 

これは、私は、ユーザーが持っているテキストを取得する必要があるコードですので、同じようexecを使用して
おかげでこれを行うには

UPDATE 一つの方法は、辞書を使用することです入力され、リターンプレスにバインドされます。しかし、私はexecを使用しない方がよいでしょう。

+0

私は完全なコードを見ることができますか? – stetim94

+0

この質問はTkinterのか、実際のコマンドラインとは何かを持っていない、またはこれは、いくつかの作らコマンド言語を解析し、評価する方法について、純粋ですか? –

+0

tkinterや実際のコマンドライン – EriktheRed

答えて

1

あなたがexecを使用したくない場合は、機能の辞書を行うことができます。

def get_user_data(*args): 
    print(*args) 
# dictionary of functions 
functions = {'get user data': get_user_data} 

line = "get user data: erikthered, turtle" 

# parse line 
command, params = line.split(":") 
params = [p.strip() for p in params.split(",")] 
functions[command](*params) 
+0

が興味深いので、入力を解析することともっと関係があるでしょう。 'params.replace(" "、" ").split("、 ")' 、リストの代わりに、仕事も? – EriktheRed

+0

この場合、空白を含む引数に問題があります。 "緑のカメ"は "緑色になる"。 –

関連する問題