【问题标题】:Python program working in CMD but not when exported to .exePython 程序在 CMD 中工作,但在导出到 .exe 时不能
【发布时间】: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 相同的结果。

标签: python windows cmd exe


【解决方案1】:

这是getch 在 Windows 上的记录行为。箭头键首先返回 0x00 或 0xE0,然后返回键码。见documentation

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    相关资源
    最近更新 更多