PS2Exe 运行 Python 脚本不打印颜色(Colorama)

PS2Exe 运行 Python 脚本不打印颜色(Colorama)

我希望 Windows 上的某些 Python 脚本具有自定义图标,其文件名文本位于标题栏中,并且我希望它们可以固定在任务栏和开始菜单中。我发现最简单的方法是编译一个只运行 Python 脚本的 exe 文件。

这具有我上述所有优点,同时还不必每次编辑 Python 脚本时都重新编译 exe。我使用 PS2Exe 实现了这一点。例如,这是我的编译脚本:

Invoke-PS2EXE "runPythonFile.ps1" "output.exe" -iconFile icons/myIconFile.ico

以下是调用 Python 文件(名为 )的 PS1 脚本runPythonFile.ps1

Set-Location $PSScriptRoot
./myPythonFile.py arg1 arg2
Read-Host -Prompt 'Press enter to exit'

这样做有两个不良的副作用:

  1. 如果我colorama在 Python 中使用彩色打印文本,运行output.exe文件不会打印任何颜色。
  2. 如果我input在 Python 中使用该函数,则输入文本提示直到按下回车键后才会显示。

说明这两个问题的示例 Python 脚本:

from colorama import Fore, Back, Style
import colorama
colorama.init()

print(Style.BRIGHT + Fore.GREEN + "Howdy")
print(Style.BRIGHT + Fore.WHITE + "Done")

result = input("Please enter your pin number: ")
print(result)

这是一个简短视频演示两个问题(它们彼此独立)。请注意,当我运行 exe 时,我必须在提示出现之前输入输入值,但直接运行 Python 脚本时,我必须在提示出现之后输入输入值。还请注意,当我运行 exe 时,“Howdy”消息不是绿色的,但当我运行 Python 脚本时,它是绿色的。

有简单的解决方案吗?我喜欢有一个 exe 文件,它只调用 Python 脚本,以实现我在开头提到的好处,但我不喜欢它阻止我使用颜色并弄乱输入功能。有什么建议吗?

答案1

这是因为您正在使用$PsScriptRoot变量。请尝试使用以下代码。

if ($MyInvocation.MyCommand.CommandType -eq "ExternalScript"){ 
    $ScriptPath = Split-Path -Parent -Path $MyInvocation.MyCommand.Definition 
}
else { 
    $ScriptPath = Split-Path -Parent -Path ([Environment]::GetCommandLineArgs()[0]) 
    if (!$ScriptPath){ 
        $ScriptPath = Get-Location 
    } 
}

$ScriptPath并在脚本中使用变量。

相关内容