2017-11-30 4 views
0

現在、コマンドを実行するプログラムを作成しようとしています。私はそれを持っているので、コマンドのリストがあり、プログラムは自分の入力コマンドを受け取り、それがリストにあるかどうかを確認し、そうであればコマンドを実行します。もしそうでなければ、無効なコマンドを出力したい。Pythonコマンドプログラム

while 1 == 1: 
    command = input("Daisy: ") 
    commands = ['cmd', 'google'] 
    if command == 'cmd' or 'google': 
     if command == 'cmd': 
      os.system("start") 
     elif command == 'google': 
      webbrowser.open_new('google.ca') 

これは現在のものです。私はすでにリストを作ったが、私のifステートメントでは、cmdまたはgoogleと等しいかどうかを確認することができます。私はもっ​​と多くのコマンドを持っていきます。これはとても美しく見えるという性質上、私はコマンドをリストにチェックして、コマンドをリスト内で実行する方法があるかどうかを知りたかったのですそのnot、print invalidコマンド。

+0

'' command == 'cmd'または 'google'''は、あなたが思っていることをしません。代わりに ''コマンドを使う ''を使う。あなたの質問に答えるには:**はい、道があります**。 –

+0

あなたのコマンドがより複雑になる(例えばパラメータを取る)場合、['argparse'](https://docs.python.org/3/library/argparse.html)モジュールを見ることをお勧めします。 – Galen

答えて

3

コマンドごとに関数を作成し、実行するコマンドと関数の名前を辞書に格納することができます。このように:

def open_google(): 
    webbrowser.open('google.ca') 

commands = {'open_google': open_google} 

while True: 
    # Get input here 
    if command in commands: 
     commands[command]() 

この方法では、新しい機能を作成して辞書に追加するだけで済みます。メインループ内のロジックは同じままです。

+0

私はそれを入力してビート! – Galen

+0

そしておそらくあなたはプログラムを停止したいと思っています。ですから、ifコマンド== 'stop'を追加してください:メインループを解除してください。 –

+0

ありがとうございました!これは完璧です。私はちょうどpythonに入るようになったので、ばかな質問を言い訳してください。 –

0

は、私が最も汎用性の高い方法は、辞書やexecのfunktionを使用することだろうと思う

commands = dict() 
commands['google'] = "webbrowser.open_new(\"google.ca\")" 
commands['cmd'] = "os.system(\"start\")" 

if key in commands: 
    exec(commands[key]) 

今、この権利をテストすることはできませんが、それは、私が同様のプログラムをした小さなコンソールを

+0

exec機能は強力ですが、セキュリティ上の大きなリスクです。私は初心者として使用することをお勧めしません。 –

0

を動作するはずです私の発展を助けるために。

解決策はすべてのコマンドが異なるため、if-elif-elseステートメントです。したがって、すべての無効なコマンドをインターセプトする "else"があるため、配列コマンドと最初のif文は不要です。 DevUtilsはライン38で、私はコマンドを管理する:あなたはリンクがある私のコードを見たい場合は