Python 使用 cx_Freeze 执行的脚本,exe 什么都不做
Python script to executable with cx_Freeze, exe does nothing
出于练习目的,我决定编写一个密码生成器并使其成为可执行文件。
我的脚本是预期的 运行ning,编译也能正常工作,但是当我 运行 exe 文件时,没有任何反应。
我 运行 一个 Windows 10 系统并使用 Python 3.6.x 我不是 python 本身的初学者。
我在 Internet 上查找了各种页面,但在这个问题上没有找到任何帮助,我的第一个问题是编译不起作用,但我已经找到了解决方案。
编辑:我尝试使用 cmd 运行 exe,但没有输出,而是换行。
这是设置代码:
import sys
from cx_Freeze import setup, Executable
build_exe_options = {"excludes": ["tkinter"]}
base = None
if sys.platform == "win32":
base = "Win32GUI"
setup(name="Password",
version="1.0",
description="Generates a password made of 20 characters",
options={"build_exe": build_exe_options},
executables=[Executable("pass.py", base=base)])
这是我的程序:
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=" ")
我很感激任何一种见解。
去掉这两行
if sys.platform == "win32":
base = "Win32GUI"
从您的设置脚本,它应该可以工作。
base = "Win32GUI"
告诉 cx_Freeze
不要启动控制台 window 并且应该仅在主应用程序启动 GUI 时使用(例如使用 PySide、PyQt、Tk、... ).如果您 运行 来自已经启动的控制台的可执行文件,它可能还会将标准输出重定向到控制台之外。在您的情况下,您有一个基于控制台的应用程序,因此您希望启动一个控制台并接收标准输出。 cx_Freeze
documentation 部分解释了此行为。
现在,如果您 运行 您的可执行文件不使用 cmd(例如,通过在 Windows-Explorer 中双击它),它会启动一个控制台 window,在那里打印输出, 并在执行完成后立即关闭控制台。在您的示例脚本中,您希望在控制台关闭之前有时间读取输出,因此您需要做的是告诉您的脚本在完成之前等待,例如,直到您按下一个键。您可以添加
input("Press Enter to continue...")
在您的脚本末尾,请参阅 How do I make python to wait for a pressed key。
在代码后添加等待,使其不会立即完成。
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.
出于练习目的,我决定编写一个密码生成器并使其成为可执行文件。
我的脚本是预期的 运行ning,编译也能正常工作,但是当我 运行 exe 文件时,没有任何反应。
我 运行 一个 Windows 10 系统并使用 Python 3.6.x 我不是 python 本身的初学者。
我在 Internet 上查找了各种页面,但在这个问题上没有找到任何帮助,我的第一个问题是编译不起作用,但我已经找到了解决方案。
编辑:我尝试使用 cmd 运行 exe,但没有输出,而是换行。
这是设置代码:
import sys
from cx_Freeze import setup, Executable
build_exe_options = {"excludes": ["tkinter"]}
base = None
if sys.platform == "win32":
base = "Win32GUI"
setup(name="Password",
version="1.0",
description="Generates a password made of 20 characters",
options={"build_exe": build_exe_options},
executables=[Executable("pass.py", base=base)])
这是我的程序:
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=" ")
我很感激任何一种见解。
去掉这两行
if sys.platform == "win32":
base = "Win32GUI"
从您的设置脚本,它应该可以工作。
base = "Win32GUI"
告诉 cx_Freeze
不要启动控制台 window 并且应该仅在主应用程序启动 GUI 时使用(例如使用 PySide、PyQt、Tk、... ).如果您 运行 来自已经启动的控制台的可执行文件,它可能还会将标准输出重定向到控制台之外。在您的情况下,您有一个基于控制台的应用程序,因此您希望启动一个控制台并接收标准输出。 cx_Freeze
documentation 部分解释了此行为。
现在,如果您 运行 您的可执行文件不使用 cmd(例如,通过在 Windows-Explorer 中双击它),它会启动一个控制台 window,在那里打印输出, 并在执行完成后立即关闭控制台。在您的示例脚本中,您希望在控制台关闭之前有时间读取输出,因此您需要做的是告诉您的脚本在完成之前等待,例如,直到您按下一个键。您可以添加
input("Press Enter to continue...")
在您的脚本末尾,请参阅 How do I make python to wait for a pressed key。
在代码后添加等待,使其不会立即完成。
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.