在CMD中工作的Python程序,但在导出到.exe时不能

我有一个问题,我的Python程序从命令提示符运行时正常工作,但导出到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'因为没有做出select,所以不应该有任何新的行。

在这里输入图像说明

更新:使用repr()方法打印的input看起来像按下向下箭头时,它首先注册为'\ xe0',而不是'P',为什么要编译成exe? 另外我不明白为什么它会添加一个新的行,因为它应该在while循环中

使用repr打印输入()

这是在Windows上getch记录的行为。 箭头键首先返回0x00或0xE0,然后是键码。 请参阅文档 :

读取功能键或方向键时,每个功能必须被调用两次; 第一次调用返回0或0xE0,第二次调用返回实际的密钥代码。