【问题标题】:.exe closes immediately after launch when double clicked.exe 双击启动后立即关闭
【发布时间】:2015-08-05 10:09:24
【问题描述】:

我使用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.exemoto.exeproject\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中搜索了这个文件,找不到。

你知道问题出在哪里吗?

【问题讨论】:

  • 设置路径或使用带文件名的完整路径。默认情况下,双击在%windir%\system32 中运行(可能不是您的文件所在的位置)
  • @Stephan 奇怪的是我经常使用这种方法并且一切正常。我不能使用完整路径,因为我要向我的朋友发送一个 exe。那么我该如何设置我的路径呢?谢谢
  • 正如@Stephan 所说,它可能与路径有关。看起来class database 登录的路径与您的__main__ 不同。如果没有引发错误,您可能会在意外路径中找到另一个带有“ok”的日志。
  • 我很确定这是 Windows 中的默认行为。如果您想在控制台关闭之前查看程序的输出,请在程序末尾添加一个 raw_input() 读取,以便它与您的输出一起暂停。
  • 记录os.getcwd(),并比较从命令提示符运行和双击运行时的情况。

标签: python cmd exe py2exe


【解决方案1】:

这是设计使然。

如果您双击它运行的 exe,然后它会关闭。 您可以在文件末尾放置一个“raw_input()”(对于 Python2)或“input()”(对于 Python3)(在“log('for url')”之后,但缩进用于“for url在 [__CATs__,__hyphens__]:")。

关于日志中的“ok”,log() 函数是您创建的吗?如果是这样,您是否在写入文件之前将“\n”附加到日志的每一行?

【讨论】:

    猜你喜欢
    • 2015-08-22
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    • 2015-07-16
    • 2020-08-22
    相关资源
    最近更新 更多