2015-08-05 29 views
6

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?

+2

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

+0

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

+0

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

Odpowiedz

0

Jest to zgodne z projektem.

Po dwukrotnym kliknięciu przycisku exe uruchamia się, a następnie zamyka. Możesz umieścić "raw_input()" (dla Python2) lub "input()" (dla Python3) na końcu pliku (po "log (" dla adresu URL) ", ale z wcięciem użytym dla" dla adres URL w [__CATs __, __ hyphens__]: ").

O 'ok' w dzienniku, jest utworzony log() funkcja coś? Jeśli tak, to czy dodajesz \ n 'do każdego wiersza dziennika przed zapisaniem pliku?

Powiązane problemy