2016-04-14 9 views
0

私はどこからでも検索していますが、これを行う方法はわかりません。基本的に私は簡単なCLIをセットアップしようとしています。ここでは、呼び出された関数内の任意の時点でエスケープ・ボタンを押してメニューに戻ります()。これらのボードにいくつかのソリューション/バリエーションを試してみましたが、どちらも私のために働いていないので、これがどれほど複雑であるかはわかりません。誰かが私を正しい方向に向けることができるかどうか疑問に思っていました。大変感謝しています!ネストされた関数内でエスケープする

メインループは、基本的にすべての機能を呼び出し、次のようになります

if __name__=='__main__': 
    while True: 
     command = raw_input("> ") 
     if command.lower() == 'exit': 
      quit() 
      continue 
     elif command.lower() == 'help': 
      menu() 
      continue 
     elif command.lower() == 'show': 
      show() 
      continue 
     elif command.lower() == 'find': 
      finder() 
      continue 
     else: 
      print("Not a valid command.") 

私はループ中にファインダー()関数を呼び出して、私は次した場合の例は次のようになります。

def finder(): 
    q = raw_input("Search for q: ") 
    for row in open("filename.csv"): 
     if q in row: 
      print row, 

エスケープキーをトリガして、入力がqを求めている間に私をmenu()のような別の機能に連れて行くことは可能でしょうか?理想的には、私はエスケープコードが、メインループの内部に既に存在するすべての関数で引数を作成する代わりに、関数の外に存在することを望みます。これを達成する簡単な方法があるかどうかはわかりません。

+0

'KeyboardInterrupt'で十分でしょうか?私。 ctrl-c –

+0

私はそれが働くかどうかわかりませんが、強制的にプログラムを終了します。私は、プログラムを完全に閉じずに別の関数に戻る方法を探しています。しかし、それを行う方法があれば私はすべての耳です。 – Exempt

答えて

0

などfinder()にお電話をラップ:

try: 
    finder() 
except KeyboardInterrupt: 
    pass 

を使用すると、ファインダー中にCtrl-Cキーを押すと()、これはファインダーから抜け出すと、それが呼び出された時点で継続されます。

また、条件内のcontinueはすべて不要で、削除することができます。 while-loopは、明示的に指示されない限り、または状態が変化しない限り中断しません。

関連する問題