2015-08-05 16 views
6

Ho creato un file exe utilizzando il modulo py2exe. La cosa strana è che funziona come deve funzionare quando eseguo il exe dalla riga di comando, ma quando faccio doppio clic su questo exe, si apre una console (come deve fare) e la console si chiude immediatamente..exe si chiude immediatamente dopo l'avvio quando si fa doppio clic su

Ho scritto un metodo logging per capire dove è il problema e circondato il metodo da try-except che non rileva alcuna eccezione.

Ecco un pezzo del mio codice:

if __name__ == '__main__': 
    try: 
     mh = moto() 
     db = database() # you can find __init__ of database() below 
     log('ok') # I CAN'T FIND THIS LINE IN THE LOG FILE SO THE PROBLEM IS PROBABLY INSIDE __INIT__ OD database() 
    except Exception as e: 
     log(str(e)) 
     log(str(traceback.format_exc)) 

    for url in [__CATs__,__hyphens__]: 
     log(' for url') 

init database():

class database(): 

    def __init__(self): 
      self.conn = sqlite3.connect('db.db') # Database is created 
      self.cursor = self.conn.cursor() 
      self.create_table_moto() 
      self.drop_and_create_temp_table() 
      log('init_end') # I CAN FIND THIS LINE IN LOG FILE SO THE PROBLEM SHOULD BE AFTER database() initialization but i doubt that because of the log right after database() 

Quindi la principale cosa strana è che __init__ metodo di database() è probabilmente funziona correttamente perché posso vedere l'ultima riga log('init_end') nel mio file di registro. Ma dopo questa inizializzazione c'è un altro registro log('ok') che non vedo in un file di registro e nessuna eccezione è stata catturata.

EDIT MOLTO IMPORTANTE:

Quando si crea un file exe utilizzando py2exe, viene creata una cartella dist nella cartella in cui è memorizzato il progetto. Il file exe può essere avviato usando cmd solo quando sono in questa cartella genitore, quindi devo scrivere dist\moto.exe. moto.exe o project\dist\moto.exe non funziona. EDIT:

Un'altra cosa strana: la linea

ho aggiunto: mLib.printToFile('testovaci_txt.txt', 'nieco') subito dopo log('ok') che non funziona e crea il file testovaci_txt.txt nella cartella in cui sono memorizzati i 'exe' e altri file.

EDIT2: il metodo log si trova nella mia libreria esterna all'interno di site-packages. Per capire dove viene salvato il file log('ok') ho creato 'log_2 (' ok ')' che crea un file logging-testing.txt e lo inserisce subito dopo log('ok') e avvia il programma. Quindi ho cercato questo file in Windows e non lo trova.

Sai dove potrebbe essere il problema?

+2

impostare il percorso o utilizzare il percorso completo con nomi di file. Facendo doppio clic su '% windir% \ system32' per impostazione predefinita (probabilmente non è dove risiede il tuo file) – Stephan

+0

@Stephan Lo strano è che io uso questo approccio molto spesso e tutto funziona correttamente. Non posso usare il percorso completo perché invierò un exe al mio amico. Quindi, come ho potuto impostare il mio percorso? Grazie –

+0

Come dice @Stephan, probabilmente ha a che fare con il percorso. Sembra che il "database delle classi" stia registrando un percorso diverso da "__main__".È possibile trovare un altro registro con "ok" in un percorso imprevisto se non è stato generato alcun errore. – cnluzon

risposta

0

È di progettazione.

Se si fa doppio clic sul file exe viene eseguito e chiuso. Puoi mettere un "raw_input()" (per Python2) o "input()" (per Python3) alla fine del file (dopo "log ('per url')" ma con il rientro usato per "per url in [__CATs __, __ hyphens__]: ").

Informazioni su "ok" nel registro, la funzione log() è stata creata? In tal caso, aggiungi "\ n" a ogni riga del registro prima di scrivere il file?

Problemi correlati