【问题标题】:Python raw_input causing EOFError after creating app with py2app使用 py2app 创建应用程序后 Python raw_input 导致 EOFError
【发布时间】:2024-01-24 07:45:01
【问题描述】:

我编写了一个小脚本,可以帮助我解决拼字游戏和单词扭曲问题。当我从 Mac OS X 终端运行它时它工作正常。我想将脚本作为独立的 Mac 应用程序与我的朋友分享。因此我为此使用了 py2app,但是当我双击它时应用程序崩溃了。控制台显示以下错误消息:

1/17/11 2:13:51 PM [0x0-0x4a44a4].org.pythonmac.unspecified.warp[9875] Enter letters: Traceback (most recent call last):
1/17/11 2:13:51 PM [0x0-0x4a44a4].org.pythonmac.unspecified.warp[9875]   File "/Users/***/wordwarp/dist/warp.app/Contents/Resources/__boot__.py", line 137, in <module>
1/17/11 2:13:51 PM [0x0-0x4a44a4].org.pythonmac.unspecified.warp[9875]     _run('warp.py')
1/17/11 2:13:51 PM [0x0-0x4a44a4].org.pythonmac.unspecified.warp[9875]   File "/Users/***/wordwarp/dist/warp.app/Contents/Resources/__boot__.py", line 134, in _run
1/17/11 2:13:51 PM [0x0-0x4a44a4].org.pythonmac.unspecified.warp[9875]     execfile(path, globals(), globals())
1/17/11 2:13:51 PM [0x0-0x4a44a4].org.pythonmac.unspecified.warp[9875]   File "/Users/***/wordwarp/dist/warp.app/Contents/Resources/warp.py", line 4, in <module>
1/17/11 2:13:51 PM [0x0-0x4a44a4].org.pythonmac.unspecified.warp[9875]     word = raw_input("Enter letters: ")
1/17/11 2:13:51 PM [0x0-0x4a44a4].org.pythonmac.unspecified.warp[9875] EOFError: EOF when reading a line
1/17/11 2:13:51 PM warp[9875] warp Error
1/17/11 2:13:51 PM warp[9875] warp Error
1/17/11 2:13:52 PM com.apple.launchd.peruser.501[469] ([0x0-0x4a44a4].org.pythonmac.unspecified.warp[9875]) Exited with exit code: 255

这是实际的脚本:

import string

word = raw_input("Enter letters: ")
dict = open('dict.txt')
wordmap = {}
for c in string.lowercase:
    wordmap[c] = 0

for c in word:
    if c in wordmap:
        wordmap[c] = wordmap[c]+1

for line in dict:
    line = line.strip()
    if len(line) >= 3:
        linemap = {}
        for c in string.lowercase:
            linemap[c] = 0
        for c in line:
            if c in linemap:
                linemap[c] = linemap[c]+1
        match = True
        for c in linemap:
            if linemap[c] > wordmap[c]:
                match = False
        if match is True:
            print line

我怎样才能摆脱错误?

【问题讨论】:

    标签: python py2app raw-input eoferror


    【解决方案1】:

    py2app 包装为应用程序的 Python 程序没有用于输入输入的终端窗口。您需要提供一些更高级的输入输入和输出输出方式,例如使用 Python 的 Tkinter 模块。如果您的脚本从终端运行并且您想要制作一个可点击的应用程序,那么将其打包为一个启动Terminal 会话的AutomaterAppleScript 应用程序可能会更简单。

    【讨论】:

    • 我明白了。使用 Automator 或 AppleScript(我以前从未使用过)最简单的方法是什么?只有两个文件:warp.py 和 dict.txt
    • 我没有用过py2app,但是从文件或命令行选项中读取word是否可以接受?
    • 首先使用py2app 的原因是为了生成一个标准的OS X GUI 应用程序,它可以通过在Finder 中双击来启动。在这种情况下,没有命令行。如果您的应用程序预计从 shell 命令行运行,那么您很可能不应该使用py2app。只需像大多数跨平台 Python 包一样,使用 Python Distutils 和控制台脚本将其打包。