Python脚本可使用cx_Freeze执行,exe无功能

时间:2018-10-17 18:23:35

标签: python executable cx-freeze

出于实践考虑,我决定编写一个Passwordgenerator并将其设为可执行文件。
我的脚本正在按预期运行,并且编译也可以正常运行,但是当我运行exe文件时,没有任何反应。 我运行Windows 10系统并使用Python 3.6.x,但我不是python本身的初学者。

我在Internet上浏览了各个页面,但是没有发现任何可以帮助我解决该问题的东西,我的第一个问题是编译没有用,但是我已经找到了解决方案。

编辑:我尝试使用cmd运行exe,但没有任何输出,而是出现了新行。

这是设置代码:

import random
import string

for i in range(20):
   k = random.choice(string.ascii_letters)
   j = random.randint(0, 9)
   z = random.randint(1, 2)
   if z == 1:
      x = k
   if z == 2:
      x = j
   print(x, end=" ")

这是我的程序:

SELECT DISTINCT 
d.id AS id, 
CASE
    WHEN (c.a = 'UNK' ? NULL : c.a) IS NOT NULL THEN c.a
    WHEN (b.a = 'UNK' ? NULL : b.a) IS NOT NULL THEN b.a
    WHEN (c.e = 'UNK' ? NULL : c.e) IS NOT NULL THEN c.e
    ELSE b.e
END AS output,
FROM 
   db.table
...random irrelevant joins..

我很感谢任何见识。

2 个答案:

答案 0 :(得分:0)

删除两行

if sys.platform == "win32":
   base = "Win32GUI"

从您的安装脚本开始,它应该可以工作。

base = "Win32GUI"告诉cx_Freeze不要启动控制台窗口,只有在主应用程序启动GUI时(例如,使用PySide,PyQt,Tk等),才应使用该窗口。如果您从已经启动的控制台运行可执行文件,则可能还会将标准输出重定向到控制台之外。在您的情况下,您有一个基于控制台的应用程序,因此希望启动控制台并接收标准输出。 cx_Freeze documentation中对此行为进行了部分解释。

现在,如果您在不使用cmd的情况下运行可执行文件(例如,通过在Windows-Explorer中双击它),它将启动控制台窗口,在该窗口中打印输出,并在执行完成后立即关闭控制台。在示例脚本中,您希望有时间在控制台关闭之前读取输出,因此您需要的是告诉脚本在完成之前要等待的内容,例如直到按下某个键。您可以添加

input("Press Enter to continue...")
为此,请在脚本结尾处

参见How do I make python to wait for a pressed key

答案 1 :(得分:0)

在代码后添加等待,以便它不会立即完成。

import random
import string

for i in range(20):
   k = random.choice(string.ascii_letters)
   j = random.randint(0, 9)
   z = random.randint(1, 2)
   if z == 1:
      x = k
   if z == 2:
      x = j
   print(x, end=" ")

import time
time.sleep(5)   #<-- Sleep for 5 seconds

您还可以使用我的Python Executable maker