Python 3.x Python 3 cx_冻结Win34GUI问题

Python 3.x Python 3 cx_冻结Win34GUI问题,python-3.x,cx-freeze,Python 3.x,Cx Freeze,我已经多次使用这个compile.py设置并取得了巨大成功。我刚刚更新了一个应用程序,发现它在python中运行良好。当我冻结它时,它不会正常运行,也不会输出任何错误 以下是我的编译代码: from cx_Freeze import setup, Executable import sys base = None if sys.platform == "win32": base = "Win32GUI" setup( name = "MYAPP" , version

我已经多次使用这个compile.py设置并取得了巨大成功。我刚刚更新了一个应用程序,发现它在python中运行良好。当我冻结它时,它不会正常运行,也不会输出任何错误

以下是我的编译代码:

from cx_Freeze import setup, Executable
import sys

base = None
if sys.platform == "win32":
     base = "Win32GUI"
setup( name = "MYAPP" , 
       version = "0.1" , 
       description = "MYAPP" , 
       executables = [Executable("MYAPP.py",
                                 icon = "s.ico", 
                                 base = base)] , )
当我删除base=base行时,会启动带有输出窗口的.exe,并且应用程序会正常运行。如果我将base=base设置为删除输出窗口,应用程序将无法正常运行

我相信问题代码是urllib.request.urlretrieve的reporthook函数,因为直到我尝试集成这个下载进度条,它才开始这么做。这是为我试图下载的每个文件运行的for循环的一部分。只有在compile.py文件中设置base=base时,它才会下载第一个文件,然后在达到100%后停止

我迷路了

谢谢你的帮助

def reporthook(blocknum, blocksize, totalsize):
    percent = 0
    readsofar = blocknum * blocksize
    if totalsize > 0:
        percent = readsofar * 1e2 / totalsize
        if percent >= 100:
            percent = 100

        s = "\r%5.1f%% %*d / %d" % (
            percent, len(str(totalsize)), readsofar, totalsize)

        self.time['text'] = 'Downloading File: '+self.fn+'' + s

        if readsofar >= totalsize: # near the end
            sys.stderr.write("\n")
    else: # total size is unknown
        sys.stderr.write("read %d\n" % (readsofar,))

    #UPDATE PROGRESSBAR
    self.pb.config(mode="determinate")
    if percent > 0:
        self.dl_p = round(percent,0)
        self.pb['value'] = self.dl_p
        self.pb.update()
    if percent > 100:
        self.pb['value'] = 0
        self.pb.update()

urllib.request.urlretrieve(imgs, fileSavePath, reporthook)

托马斯K-这就是问题的解决方案

“如果您使用GUI库冻结它,因此在运行它时没有命令提示符,那么您根本不应该写入sys.stdout或sys.stderr。它们是用于命令提示符的,因此如果没有命令提示符,它们将无法工作。–Thomas K 11小时前”


谢谢

这是一个不错的问题,但您的代码格式有问题。你能把背面记号之间的空格去掉吗?一个更具可读性的问题可能会导致更多的回复。对不起,网站上有新的。要习惯编辑,没问题,只是想帮忙。但是我在很长一段时间里第一次看到的一个更好的问题,因此其他人和我给你们投票:)继续努力!所以,我试着用py2exe编译程序,这个问题完全解决了。我怀疑这是因为cx_freeze在做这件事。如果你解决了自己的问题,并且能够准确地找出问题所在,写下答案,发布并接受它。可以接受你自己的答案,只是为了将来有同样问题的人能更容易地解决他/她的问题。