使用 cx_Freeze 执行的 Python 脚本,exe 啥也不做
Posted
技术标签:
【中文标题】使用 cx_Freeze 执行的 Python 脚本,exe 啥也不做【英文标题】:Python script to executable with cx_Freeze, exe does nothing使用 cx_Freeze 执行的 Python 脚本,exe 什么也不做 【发布时间】:2018-10-17 18:23:35 【问题描述】:出于练习目的,我决定编写一个密码生成器并使其成为可执行文件。 我的脚本正在按预期运行,并且编译也可以,但是当我运行 exe 文件时,什么也没有发生。 我运行 Windows 10 系统并使用 Python 3.6.x,我不是 Python 本身的初学者。
我在互联网上查找了各种页面,但没有发现任何对我有帮助的问题,我的第一个问题是编译不起作用,但我已经找到了解决方案。
编辑:我尝试使用 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=" ")
我很感激任何形式的见解。
【问题讨论】:
运行似乎什么都不做的可执行文件的提示:打开命令行,cd 到包含应用程序的目录(良好做法),然后在那里运行可执行文件。您是否看到程序的任何输出或是否立即转到新行? @Timothy Jannace 我忘记在帖子中添加它,我试了一下,我立即得到新行,我将在上面添加它 希望这个链接可以帮助你:***.com/questions/44491802/… @Mohamad 脚本本身就像我上面所说的那样工作,我的问题是可执行文件 您在上面发布的 setup.py 脚本根据他们的教程看起来是正确的。您用于构建可执行文件的确切命令是什么? 【参考方案1】:去掉这两行
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。
【讨论】:
感谢您的建议,它现在可以与 cmd 一起使用,有没有办法在不使用 cmd 的情况下执行它? @Noah 如果我正确理解您的评论,当您在不使用 cmd 的情况下运行可执行文件(即在 Windows-Explorer 中双击它)时,它会启动一个控制台窗口,在那里打印输出,并在执行完成后立即关闭控制台。然后你需要的是告诉你的脚本等到你按下一个键后再完成。为此,您可以在脚本末尾添加input("Press Enter to continue...")
,请参阅this question。
谢谢,按预期工作,非常感谢您可以将其添加到您的答案中以便我正式接受吗?
@Noah 很好用。我已经相应地编辑了我的答案。【参考方案2】:
在代码之后添加等待,使其不会立即完成。
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。
【讨论】:
以上是关于使用 cx_Freeze 执行的 Python 脚本,exe 啥也不做的主要内容,如果未能解决你的问题,请参考以下文章
可执行文件 = 可执行文件 python 错误(尝试使用 cx_freeze 将 pygame 转换为可执行文件)
记录使用cx_Freeze打包Python成exe可执行程序
如何减少 cx_Freeze 编译的 Python 可执行文件大小?
尝试使用 cx_freeze 将 python 文件转换为可执行文件时出错