.exe 在双击启动后立即关闭
.exe closes immediately after launch when double clicked
我使用 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()
所以最奇怪的是 database() 的 __init__
方法可能工作正常,因为我可以在我的日志文件中看到最后一行 log('init_end')
。但是在这个初始化之后是另一个日志log('ok')
,我在日志文件中没有看到它,也没有发现异常。
非常重要的编辑:
当您使用 py2exe 创建 exe 文件时,它会在您的项目存储文件夹中创建一个文件夹 dist
。只有当我在这个父文件夹中时,才能使用 cmd 启动 exe 文件,所以我必须写 dist\moto.exe
。 moto.exe
或 project\dist\moto.exe
不起作用。
编辑:
另一个奇怪的事情:
我在 log('ok')
之后添加了行:mLib.printToFile('testovaci_txt.txt', 'nieco')
,但行不通,它会在 'exe' 和其他文件所在的文件夹中创建文件 testovaci_txt.txt
已存储。
EDIT2:log
方法在我的外部库中 site-packages
。要弄清楚 log('ok')
在哪里保存我创建的文件“log_2('ok')”,它会创建一个文件 logging-testing.txt
并将其放在 log('ok')
之后并启动程序。然后我在Windows里找这个文件,没找到
您知道问题出在哪里吗?
这是设计使然。
如果您双击它运行的 exe,然后它会关闭。
您可以在文件末尾放置一个 "raw_input()"(对于 Python2)或 "input()"(对于 Python3)(在“log(' for url 之后') " 但缩进用于 " for url in [__CATs__,__hyphens__]: ").
关于日志中的 'ok',log() 函数是您创建的吗?如果是这样,您是否在写入文件之前将'\n'附加到日志的每一行?
我使用 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()
所以最奇怪的是 database() 的 __init__
方法可能工作正常,因为我可以在我的日志文件中看到最后一行 log('init_end')
。但是在这个初始化之后是另一个日志log('ok')
,我在日志文件中没有看到它,也没有发现异常。
非常重要的编辑:
当您使用 py2exe 创建 exe 文件时,它会在您的项目存储文件夹中创建一个文件夹 dist
。只有当我在这个父文件夹中时,才能使用 cmd 启动 exe 文件,所以我必须写 dist\moto.exe
。 moto.exe
或 project\dist\moto.exe
不起作用。
编辑:
另一个奇怪的事情:
我在 log('ok')
之后添加了行:mLib.printToFile('testovaci_txt.txt', 'nieco')
,但行不通,它会在 'exe' 和其他文件所在的文件夹中创建文件 testovaci_txt.txt
已存储。
EDIT2:log
方法在我的外部库中 site-packages
。要弄清楚 log('ok')
在哪里保存我创建的文件“log_2('ok')”,它会创建一个文件 logging-testing.txt
并将其放在 log('ok')
之后并启动程序。然后我在Windows里找这个文件,没找到
您知道问题出在哪里吗?
这是设计使然。
如果您双击它运行的 exe,然后它会关闭。 您可以在文件末尾放置一个 "raw_input()"(对于 Python2)或 "input()"(对于 Python3)(在“log(' for url 之后') " 但缩进用于 " for url in [__CATs__,__hyphens__]: ").
关于日志中的 'ok',log() 函数是您创建的吗?如果是这样,您是否在写入文件之前将'\n'附加到日志的每一行?