2013-05-10 2 views
9

질문이 표시되지 않을 수 있습니다.Python : cmd 프롬프트와 빈 줄을 넣은 상태에서 마지막 명령을 실행하십시오.

자세히 자세히 알려드립니다. 내 자신의 CLI 프레임 워크를 구현하는 python cmd 라이브러리를 사용하고 마지막 명령을 실행하는 명령을 입력하지 않고 입력 단추를 누르십시오. 이건 내가 원하는게 아니야.

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

그러면 cmd -args가 다시 실행됩니다. 그러나 나는 단지 새로운 라인으로 가고 싶다.

답변

6

오랜 인터넷 검색 결과이 문제를 방지 할 수있는 유용한 조언을 찾지 못했습니다. cmd 라이브러리에 들어가서 메서드를 재정의하기로 결정했습니다.

난에 cmd은 precmd을 실행하는 것이 그것을 상상 을 onecmd 및 순차적 방법 postcmd. 나는 코드를 추적하여 onecmd가 주어진 라인을 벗어나는 주요 코드임을 확인했습니다. 구문 분석을 확인한 다음 행을 확인합니다. line이 비어 있으면 emptyline 메서드를 호출하고 lastcmd이라는 전역 변수 인 마지막 명령을 반환합니다. Emptyline 메서드를 재정의하고 내 문제가 해결되었습니다.

다음은 내가 작성한 방법입니다.

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

그것은 큰 거래를 할 수 있지만, 경우에 대비 명심하지 않을 수 있습니다 : 여기

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) 

그리고는 내 꺼야.

+3

+1 자진답은 SO – msw

+0

에 대한 감사합니다. @msw 감사합니다. 도움이되기를 바랍니다. –

+0

이 점을 이해해 주셔서 감사합니다. 나는이 동작을 위해 cmd 모듈이 제공하는 기본 동작에 대해 당혹 스럽다. – oneself

10
def emptyline(self): 
     pass 

괜찮습니까!

관련 문제