Utworzyłem plik exe
użyciu modułu py2exe
. Dziwne jest to, że działa tak, jak musi działać po uruchomieniu exe
z wiersza poleceń, ale kiedy dwukrotnie kliknę na ten exe
, otwiera konsolę (tak jak trzeba) i konsola natychmiast się zamyka..exe zamyka się natychmiast po uruchomieniu po dwukrotnym kliknięciu
Napisałem metodę logging
, aby dowiedzieć się, gdzie jest problem i otoczyłem metodę przez try-except
, która nie przechwytuje żadnego wyjątku.
Oto fragment mojego kodu:
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')
startowych bazy danych():
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()
Więc najważniejsze dziwne jest to, że __init__
metoda bazy danych() jest prawdopodobnie działa poprawnie ponieważ widzę ostatnią linię log('init_end')
w moim pliku dziennika. Ale prawidłowość po tej inicjalizacji to kolejny dziennik log('ok')
, którego nie widzę w pliku dziennika i żaden wyjątek nie został przechwycony.
BARDZO WAŻNE EDIT:
Podczas tworzenia pliku exe za pomocą py2exe, tworzy folder dist
w folderze, w którym jest przechowywany projekt. Plik exe można uruchomić przy użyciu cmd tylko wtedy, gdy jestem w tym folderze nadrzędnym, więc muszę napisać dist\moto.exe
. moto.exe
lub project\dist\moto.exe
nie działa. EDIT:
Kolejna dziwna rzecz:
Dodałem linia: mLib.printToFile('testovaci_txt.txt', 'nieco')
zaraz po log('ok')
która nie pracuje i tworzy plik testovaci_txt.txt
w folderze gdzie „exe” i inne pliki są przechowywane.
EDIT2: Metoda log
znajduje się w mojej bibliotece zewnętrznej wewnątrz site-packages
. Aby dowiedzieć się, gdzie log('ok')
zapisuje plik, utworzyłem 'log_2 (' ok ')', który tworzy plik logging-testing.txt
i umieszcza go zaraz po log('ok')
i uruchamia program. Potem szukałem tego pliku w systemie Windows i nie mogę go znaleźć.
Czy wiesz, gdzie może być problem?
ustaw ścieżkę lub użyj pełnej ścieżki z nazwami plików. Podwójne kliknięcie działa domyślnie w '% windir% \ system32' (prawdopodobnie tam nie ma twojego pliku) – Stephan
@Stephan Dziwne jest to, że używam tego podejścia bardzo często i wszystko działa poprawnie. Nie mogę użyć pełnej ścieżki, ponieważ zamierzam wysłać exe do mojego przyjaciela. Jak mogę ustawić moją ścieżkę? Dzięki –
Jak mówi @Stephan, prawdopodobnie ma to związek ze ścieżką. Wygląda na to, że 'baza danych klas' loguje się inną ścieżką niż' __main__'.Możesz znaleźć inny log z tym "ok" w nieoczekiwanej ścieżce, jeśli nie zostanie zgłoszony błąd. – cnluzon