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?
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
@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 –
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