Python raw_input вызывает EOFError после создания приложения с py2app - PullRequest
3 голосов
/ 17 января 2011

Я написал небольшой скрипт, который помогает мне решать проблемы с скрэбблом и искажением слов. Он отлично работает, когда я запускаю его из терминала 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

Как мне избавиться от ошибки?

1 Ответ

2 голосов
/ 17 января 2011

Программы Python, упакованные как приложения py2app, не имеют окна терминала, из которого можно вводить данные.Вам нужно будет предоставить какой-нибудь более причудливый способ ввода и вывода вывода, например, с помощью модуля Tkinter Python.Если ваш скрипт запускается из терминала и вы хотите создать приложение, реагирующее на клики, вероятно, было бы проще упаковать его как приложение Automater или AppleScript, которое запускает сеанс Terminal.

...