Python raw_input вызывает ошибку EOFError после создания приложения с помощью py2app

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

Как я могу избавиться от ошибки?


person occasionalcoder123    schedule 17.01.2011    source источник


Ответы (1)


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

person Ned Deily    schedule 17.01.2011
comment
Я понимаю. Какой самый простой способ сделать это с помощью Automator или AppleScript (я никогда раньше не использовал их)? Всего два файла: warp.py и dict.txt. - person occasionalcoder123; 17.01.2011
comment
Я не использовал py2app, но было бы приемлемо прочитать word из файла или параметра командной строки? - person James; 30.11.2011
comment
Причина использования py2app в первую очередь заключается в том, чтобы создать стандартное приложение с графическим интерфейсом OS X, которое можно запустить двойным щелчком в Finder. В этом случае нет командной строки. Если предполагается, что ваше приложение будет запускаться из командной строки оболочки, вам, скорее всего, не следует использовать py2app. Просто упакуйте его с помощью Python Distutils и консольного скрипта, как это делают большинство кросс-платформенных пакетов Python. - person Ned Deily; 30.11.2011