2013-05-10 20 views
9

Pytanie może nie być wystarczająco jasne, aby uzyskać.Python: cmd wykonaj ostatnią komendę, a podpowiedź i pustą linię

Pozwolę sobie wyjaśnić szczegółowo. Używam biblioteki cmd Pythona do implementacji mojego własnego środowiska CLI, a po naciśnięciu klawisza Enter bez wpisywania żadnego polecenia wykonuje on ostatnie polecenie. To nie ja chcę zrobić.

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

Następnie wykonamy ponownie cmd --args. Jednak po prostu chcę zejść z nową linią.

Odpowiedz

6

Po długim przeglądzie google nie mogłem znaleźć cennego zalecenia, aby temu zapobiec. Decyduję się wejść do biblioteki cmd i zastąpić tę metodę.

I zorientowaliśmy się, że cmd wykonać precmd, onecmd i postcmd metod sekwencyjnie. Sprawdziłem kod i widzę, że onecmd jest głównym, który wykracza poza podaną linię. Sprawdza parsowanie, a następnie sprawdza linię. Jeśli linia jest pusta, wywołuje metodę emptyline i zwraca ostatnią komendę, która jest zmienną globalną nazywaną lastcmd. Zastanawiam się nad metodą pustego wiersza, a mój problem został naprawiony.

Oto metoda, którą napisałem zastąpić.

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) 

I tu jest moje:

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') 

To nie może być nic wielkiego, ale o tym pamiętać na wszelki wypadek.

+3

+1 self-odpowiedzi są dobre dla SO – msw

+0

dzięki @msw Mam nadzieję, że będzie to pomocne. –

+0

Dziękuję za zrozumienie tego. Jestem zaskoczony domyślnym zachowaniem modułu cmd dla tej akcji. – oneself

10
def emptyline(self): 
     pass 

Wszystko będzie dobrze!

Powiązane problemy