2014-01-16 1 views
2

명령 프롬프트에서 실행할 때 내 파이썬 프로그램이 올바르게 작동하지만 exe로 내보낼 때 제대로 작동하지 않는 문제가 있습니다. 특히 나는이 부분의 코드에 문제가 있어요, 아마이이 일을 더 나은 방법이 올바르게 명령 프롬프트에서CMD에서 작동하는 파이썬 프로그램 .exe로 내 보낸 경우가 아닙니다.


def select_pcb_num(self, boardDrawingNumber): 
    xTuple = XTuple() 
    temp = xTuple.find_pcb_item_number(boardDrawingNumber) 
    if len(temp)>1: 
     iSelect = int(0) 
     rawChar = '' 
     query = '{0} variants found, select correct board [up/down]: {1}\t\t\t\t' 
     sys.stdout.write(query.format(len(temp), temp[iSelect])) 
     rawChar = msvcrt.getch() 
     while not rawChar == '\r': 
      if ord(rawChar) == int(72): # upkey 
       iSelect = (iSelect + 1)%len(temp) 
      elif ord(rawChar) == int(80): # downkey 
       iSelect = (iSelect - 1)%len(temp) 
      sys.stdout.write('\r') 
      sys.stdout.write(query.format(len(temp), temp[iSelect])) 
      rawChar = msvcrt.getch() 
     sys.stdout.write('\n') 
     return temp[iSelect] 
    else: 
     return temp 

을? : 행의 시작 부분에 반환하고 그 위에 기록 위쪽 또는 아래쪽 화살표를 누르면. 그러나 exe로 내 보내면 같은 줄이 다시 인쇄되고 올바른 줄이 인쇄됩니다. 예제 그림을 보아라. 빨간색 화살표가있는 줄은 인쇄되지 않아야한다. 선택이 없기 때문에 '\ n'에 도착하지 않았기 때문에 새로운 줄이 없어야한다.

enter image description here

업데이트 : 상기 방법에 repr (인쇄 입력) 모양의 아래쪽 화살표 그것을 EXE 파일로 컴파일 한 이유 'P'로서 '\의 xe0'등 및보다 먼저 레지스터를 누르면 이거 야? 이 새로운 라인을 추가 왜이 while 루프

printing input using repr()

+0

입력의'repr' 버전을 인쇄하여 실제 입력 내용을 확인하십시오. –

+1

".exe로 내 보낸"방법을 지정할 수도 있습니다. Pyinstaller를 사용하여 .exe로 내 보낸 – geoffspear

+0

도 py2exe 같은 결과를 보았습니다. –

답변

1

이 Windows에서 getch의 문서화 된 동작입니다에 있어야하기 때문에 또한 나는 볼 수 없습니다. 화살표 키는 먼저 0x00 또는 0xE0을 반환 한 다음 키 코드를 반환합니다. documentation 참조 :

기능 키 또는 화살표 키를 읽고, 각 기능에 두 번 를 호출해야합니다; 첫 번째 호출은 0 또는 0xE0을 반환하고 두 번째 호출 은 실제 키 코드를 반환합니다.

+0

고마워, 나는 내가 그것을 놓쳤다는 바보 같은 느낌, 지금은 잘 작동합니다. –

관련 문제