2011-01-17 3 views
3

J'ai écrit un petit script qui m'aide à résoudre des problèmes de scrabble et de déformation de mots. Cela fonctionne bien quand je l'exécute à partir du terminal Mac OS X. Je voudrais partager le script avec mes amis en tant qu'application Mac autonome. D'où j'ai utilisé py2app pour cela, mais l'App s'est écrasé quand je double-cliquez dessus. La console affiche le message d'erreur suivant:Python raw_input provoquant EOFError après avoir créé l'application avec 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 

Voici le script réel:

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 

Comment puis-je me débarrasser de l'erreur?

Répondre

2

Les programmes Python encapsulés en tant qu'applications par py2app ne possèdent pas de fenêtre de terminal à partir de laquelle entrer une entrée. Vous devrez fournir un moyen plus génial d'entrer des données d'entrée et de sortie, par exemple en utilisant le module Tkinter de Python. Si votre script s'exécute depuis le terminal et que vous souhaitez créer une application cliquable, il est probablement plus simple de l'empaqueter en tant qu'application Automater ou AppleScript qui lance une session Terminal.

+0

Je vois. Quel serait le moyen le plus simple d'utiliser Automator ou AppleScript (que je n'avais jamais utilisé auparavant)? Il n'y a que deux fichiers: warp.py et dict.txt – occasionalcoder123

+0

Je n'ai pas utilisé py2app, mais serait-il acceptable de lire 'word' dans un fichier ou une option de ligne de commande? – James

+0

La raison pour laquelle 'py2app' est utilisé en premier lieu est de produire une application GUI OS X standard qui peut être lancée en double-cliquant dans le Finder. Dans ce cas, il n'y a pas de ligne de commande. Si votre application doit être exécutée à partir d'une ligne de commande shell, vous ne devriez probablement pas utiliser 'py2app'. Juste empaquetez-le avec Python Distutils et un script de console comme la plupart des paquets Python multiplateformes. –