【发布时间】:2014-01-16 14:16:12
【问题描述】:
我遇到了一个问题,即我的 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',因为没有进行任何选择。
更新: 使用 repr() 方法打印的输入看起来就像按下向下箭头时它首先注册为“\xe0”而不是“P”,为什么编译为 exe 会导致这种情况?另外我不明白为什么要添加新行,因为它应该在 while 循环中
【问题讨论】:
-
尝试打印输入的
repr版本以检查实际输入是什么。 -
您可能还想指定如何“导出到 .exe”。
-
使用 PyInstaller 导出到 .exe,也尝试了 py2exe 相同的结果。