python - Pyinstaller 可执行文件在隐藏时不会运行进程

标签 python windows macos pyinstaller

我正在尝试运行用 PyInstaller 打包的单文件 python 可执行文件。该脚本包含需要执行的系统命令。但是,当我尝试运行它们(在 Windows 上)时,它们不会执行。问题是,它们只有在使用 PyInstaller 选项 no-console 时才会执行失败,该选项隐藏控制台并在后台运行。

我使用以下选项:--noconsole-F

我不仅尝试了subprocess.open函数,还尝试了os.popen(),这两个函数都不起作用。

此外,我需要控制台输出,因此 os.system() 将不是一个选项...请在回答时牢记这一点。虽然,这个函数确实执行了命令,所以我认为获取输出是问题所在。我假设我必须更改标准输出或其他内容,或者如果在没有控制台的情况下执行命令,则输出会丢失或根本不会生成。抱歉,如果我听起来缺乏经验。

我的计算机上没有运行任何防病毒软件,也没有出现 Windows Defender 等消息。我知道这是一个不稳定的组合 - 在隐藏的同时运行系统命令 - 我只想制作一个每分钟杀死另一个程序的非恶意程序。抱歉,如果有任何不清楚的地方...如果有任何不清楚的地方,请询问。谢谢:)

编辑

这里有一些代码可以提供帮助

command = data['command']
command_split = command.split(" ")

p = subprocess.Popen(command_split, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate()
result = out.decode() if out else err.decode()


io.emit("client:console_output", {
    'output':result,
    'adminID':data['adminID']
})

编辑2

了解该功能在控制台未隐藏时起作用;因此,它与逻辑或代码无关,只是因为它被隐藏了。无论如何,这是输出。

x = "taskkill /im chrome.exe /f"
print(x.split(" "))
-> ['taskkill', '/im', 'chrome.exe', '/f']

最佳答案

您需要使用subprocess.PIPE将流程输出重定向到变量。您还需要处理子进程 stdin 并手动关闭它。 然后,您可以简单地使用 -w--noconsole 标志禁用控制台。

import subprocess
p = subprocess.Popen(["ipconfig"], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
out, err = p.communicate()
p.stdin.close()
result = out.decode() if out else err.decode()

关于python - Pyinstaller 可执行文件在隐藏时不会运行进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56993993/

相关文章:

node.js - Node.js 中的 Websocket 连接在发送时关闭

Mac、Windows 和 Linux 上的 Java 桌面应用程序安装程序

cocoa - NSView 之间的 CoreImage 转换

python - 如何将 UNIX 可执行文件转换为桌面图标快捷方式?

python - 导入错误 : No module named grid_search, learning_curve

python - 避免生成器分离器产生 None 值

python - pip 安装 dynamic-dynamodb InsecurePlatformWarning

python - 将包含整数的数据框列转换为日期

c++ - 从宽到窄的字符

windows - Sphinx:增量合并时权限被拒绝/管道损坏