2015-08-05 2 views
6

Я создал файл exe с использованием модуля py2exe. Странно, что он работает так, как он должен работать, когда я запускаю exe из командной строки, но когда я дважды щелкаю по этому exe, он открывает консоль (как это и должно быть), и консоль немедленно закрывается..exe закрывается сразу после запуска при двойном щелчке

Я написал метод logging, чтобы выяснить, где проблема, и окружил метод try-except, который не вызывает никаких исключений.

Вот часть моего кода:

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') 

инициализации базы данных():

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() 

Так главное странно то, что __init__ метод базы данных(), вероятно, работает правильно потому что я вижу последнюю строку log('init_end') в моем файле журнала. Но после этой инициализации устанавливается еще один журнал log('ok'), который я не вижу в файле журнала, и никаких исключений не было.

ОЧЕНЬ ВАЖНО EDIT:

При создании файла ех с помощью py2exe, он создает папку dist в папке, где хранятся ваш проект. Файл exe можно запустить с помощью cmd только тогда, когда я в этой родительской папке, поэтому мне нужно написать dist\moto.exe. moto.exe или project\dist\moto.exe не работает. EDIT:

Другая странная вещь:

Я добавил линию: mLib.printToFile('testovaci_txt.txt', 'nieco') сразу после log('ok'), который не работает, и это создает файл testovaci_txt.txt в папке, где хранится «EXE» и другие файлы.

EDIT2: Метод log находится в моей внешней библиотеке внутри site-packages. Чтобы выяснить, где log('ok') сохраняет файл, который я создал, 'log_2 (' ok ')', который создает файл logging-testing.txt и помещает его сразу после log('ok') и запускает программу. Затем я искал этот файл в Windows и не смог его найти.

Вы знаете, где может быть проблема?

+2

Задайте свой путь или используйте полный путь с именами файлов. Двойное нажатие запускается в '% windir% \ system32' по умолчанию (возможно, это не то место, где находится ваш файл) – Stephan

+0

@Stephan Странно, что я очень часто использую этот подход, и все работает нормально. Я не могу использовать полный путь, потому что я собираюсь отправить exe моему другу. Итак, как я мог установить свой путь? Спасибо –

+0

Как @Stephan говорит, это, вероятно, связано с путём. Похоже, что «база данных классов» регистрируется на другом пути, чем ваш '__main__'.Вы можете найти другой журнал с этим «ok» в неожиданном пути, если не была выбрана ошибка. – cnluzon

ответ

0

Это по дизайну.

Если вы дважды щелкните по exe, он запускается и закрывается. Вы можете поместить в конец файла «raw_input()» (для Python2) или «input()» (для Python3) (после «log (« для url »)», но с отступом, используемым для «для url в [__CATs __, __ hyphens__]: ").

О 'ok' в журнале, является ли функция log() чем-то, что вы создали? Если да, добавьте '\ n' в каждую строку журнала перед записью файла?

Смежные вопросы