2013-05-10 9 views
9

La domanda potrebbe non essere abbastanza chiara da ottenere.Python: cmd esegue l'ultimo comando mentre prompt e linea vuota

Lasciatemi chiarire in dettaglio. Sto usando la libreria cmd python per implementare il mio framework CLI e quando premo il pulsante enter senza digitare alcun comando, esegue l'ultimo comando. Questo non è quello che voglio fare.

mycli~: cmd --args 
executes command 
execution stops 
mycli~:[hit enter button] 

Quindi eseguirà nuovamente cmd --args. Tuttavia voglio solo andare giù con una nuova linea.

risposta

6

Dopo un lungo googling non sono riuscito a trovare un valido consiglio per evitare questo. Decido di entrare nella libreria cmd e sovrascrivere il metodo.

ho capito che cmd eseguire precmd, onecmd e postcmd metodi in sequenza. Ho rintracciato il codice e ho visto che onecmd è il principale che eccede la linea indicata. Controlla le parsès quindi controlla la linea. Se la riga è vuota, chiama il metodo emptyline e restituisce l'ultimo comando che è una variabile globale chiamata come lastcmd. Ho scavalcato il metodo della linea vuota, quindi il problema è stato corretto.

Ecco il metodo che ho sovrascritto.

def emptyline(self): 
     """Called when an empty line is entered in response to the prompt. 

     If this method is not overridden, it repeats the last nonempty 
     command entered. 

     """ 
     if self.lastcmd: 
      return self.onecmd(self.lastcmd) 

E qui è il mio:

def emptyline(self): 
     """Called when an empty line is entered in response to the prompt. 

     If this method is not overridden, it repeats the last nonempty 
     command entered. 

     """ 
     if self.lastcmd: 
      self.lastcmd = "" 
      return self.onecmd('\n') 

Potrebbe non essere un grosso problema, ma tenere a mente per ogni evenienza.

+3

+1 le auto-risposte sono buone per SO – msw

+0

grazie a @msw spero che sia utile. –

+0

Grazie per aver capito questo. Sono sconcertato dal comportamento predefinito che il modulo cmd fornisce per questa azione. – oneself

10
def emptyline(self): 
     pass 

Farebbe bene!

Problemi correlati