我已使用exe
模块创建了py2exe
文件。奇怪的是它在我从命令行运行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')
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()
所以主要奇怪的是数据库()的__init__
方法可能正常工作,因为我可以在我的日志文件中看到最后一行log('init_end')
。但是在初始化之后的另一个日志是另一个日志log('ok')
,我没有在日志文件中看到它并且没有捕获任何异常。
非常重要的编辑:
使用py2exe创建exe文件时,它会在项目存储的文件夹中创建一个文件夹dist
。只有当我在这个父文件夹中时,才能使用cmd启动exe文件,因此我必须编写dist\moto.exe
。 moto.exe
或project\dist\moto.exe
不起作用。
编辑:
另一个奇怪的事情:
我已经在mLib.printToFile('testovaci_txt.txt', 'nieco')
之后添加了行log('ok')
,该行无效,并且在' exe'的文件夹中创建了文件testovaci_txt.txt
。和其他文件存储。
EDIT2:log
方法位于site-packages
内的外部库中。要确定log('ok')
在哪里保存我创建的文件' log_2(' ok')'它会创建一个文件logging-testing.txt
并在log('ok')
之后将其放置并启动该程序。然后我在Windows中搜索了这个文件,它无法找到它。
你知道问题出在哪里吗?
答案 0 :(得分:0)
这是设计的。
如果双击它运行的exe而不是它关闭。 您可以在文件末尾放置一个“raw_input()”(对于Python2)或“input()”(对于Python3)(在“log('为url')之后”但是使用“for url”的缩进在[__CATs __,__连字符___]:“)。
关于日志中的'ok',是你创建的log()函数吗?如果是这样,在写入文件之前,是否将'\ n'追加到日志的每一行?