0

以下の doDebuggingMenu 関数では、raw_input 関数 (Python 2.6 を使用) を使用してユーザー入力を取得しています。この関数は、ユーザーが文字シーケンスを入力して Enter キーを押すまで待機します。それでも、Enter キーを押さなくても、キーボードの ESC ボタンを押すだけでユーザーがアプリケーションを終了できるようにしたいと思います (この動作を実装する関数の最後の elif ブロックを参照してください)。メニューには 2 桁の数字を入力する必要があるオプションがあるため、他のメニュー オプションについては、ユーザーが入力ボタンを押すことができる必要があります。ここでの私の質問は、次の関数でこの結合された動作をどのように提供できますか? ありがとう

def doDebugingMenu():
    while(1):
        printDebugingMenu()

        char = raw_input("\nPlease, enter your selection in the debugging menu...:")       

        if  char == '1':
           doSetTraceLevelManually()   
        elif  char == '2':
           doSetTraceDomain() 
        elif  char == '3':
           doPrintLevels()                                            
        elif  char == '4':
           doPrintConfig()
        elif  char == '5':
           doPrintProfile()
        elif  char == '6':
           doPrintMap()
        elif  char == '7':
          doPrintCounters()
        elif(char == '8'):
          doRaiseAlarm()
        elif(char == '9'):
          doClearAlarm()       
        elif(char == '10'):
          doUpdateAlarm()
        elif(char == '11'):
          doShutdown()         
        #HERE I need to catch if ESC pressed            
        elif  char == 'ESC':
          break  

def printDebugingMenu():
       print "\n######################################"
       print "#                MENU                 #"
       print "######################################"
       print "1.  setTraceLevel( traceLevel )"
       print "2.  setTraceDomain()"
       print "3.  PRINT Trace Domain and levels"  
       print "4.  PRINT config"
       print "5.  PRINT profile config"
       print "6.  PRINT mapping config"
       print "7.  PRINT counters"  
       print "8.  Issue Alarm"
       print "9.  Remove Alarm"
       print "10. Update Alarm" 
       print "11. Shutdown" 
       print "EXIT: press ESC"
4

2 に答える 2

1

raw_input()あなたが必要とするものではありません。

、ファンクション キーなどを検出できるように、入力文字を 1 文字ずつ処理する必要がありESCます。ENTER を押したときにテキストを返し、他のキーでは例外をスローする独自の入力関数を作成することもできますが、バックスペース、カーソル移動、cursesUnices またはmsvcrtWindowsのモジュールでプリミティブを見つけることができます。大変な作業です。しかし、コンソールベースのプログラムをたくさん書いている場合は、再利用できます。

ただし、通常、ユーザーはCtrl-C、プログラムを終了したい場合に使用するだけで十分に満足しており、物事を複雑にする必要はありません。何か派手なものが必要な場合は、GUI プログラムを作成します。君による。

余談ですが、そのif... elif...elifブロックは恐ろしく非 Pythonic に見えます。これを見てください。

于 2012-04-19T10:41:01.603 に答える
0

cursesそのためにはモジュールを使用する必要があると思いますが、単純なアプリケーションにはお勧めしません。

if/elifまた、Python での切り替えは通常 s で行われることに注意してくださいdict

于 2012-04-19T10:41:05.223 に答える