如果没有后台控制台,Python.exe将无法运行



我创建了一个从active directory收集信息的python程序。为了收集信息,程序运行某些PowerShell脚本来连接到服务器。

调试完成后,我使用pyinstaller-onefile-w将文件转换为.exe。当我运行.exe时,gui会毫无问题地打开,但当我试图执行连接到active directory服务器的命令时,程序会崩溃。发生这种情况时,控制台中没有错误代码。在我自己进行了一分钟的故障排除后,我意识到如果我创建的.exe没有"-w";使控制台在后台运行,程序运行良好。问题是,我真的不希望控制台在后台运行,因为这应该是一个用户友好的应用程序。

我是否可以在没有控制台窗口的情况下运行该程序,或者至少在gui运行时将其隐藏?此外,如果这是一个愚蠢的问题,请道歉。我是编程新手,甚至是powershell新手。

p.s.以下是运行PowerShell脚本的python代码片段:

pscommandUsers = '$users = ' + userNameList + ';'
pscommandHeader = 'foreach ($u in $users) {'
pscommandGroups = '$Group = Get-ADPrincipalGroupMembership -Identity $u | ' 
'Select-Object -ExpandProperty Name | Sort-Object | ft -hidetableheaders;'
pscommandTitles = '$ADProp = Get-ADUser -Identity $u -Properties Department, ' 
'Title | ForEach-Object {$_.Department, $_.Title};'
pscommandFooter = '$Array = $ADProp, $Group; Write-Output "*****" $Array}'

...process = subprocess.Popen(["powershell.exe", pscommand],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
output, error_description = process.communicate()

好吧,我想明白了。首先,所有不起作用的事情:-试图在pyinstaller中创建带有--no控制台的.exe,然后操纵子进程以隐藏控制台。-在子流程中尝试Popen之外的其他选项-在pyinstaller 中尝试替代.exe创建过程

最终解决问题的方法是完全删除pyinstaller,转而使用cx_freeze。使用cx_freeze创建.exe时,我可以使用creationflags=subprocess。在我的子进程例程中创建E_NO_WINDOW并创建我的.exe,而不会在后台出现任何烦人的控制台,也不会导致程序崩溃。

生成执行powershell.exe的子流程时,请查看是否可以使用-WindowStyle <WindowStyle>命令行参数。

powershell.exe -WindowStyle Hidden -Command <Command(s)>

文档:
about_PowerShell_exe

最新更新