pyinstaller可执行文件隐藏时不运行进程

时间:2019-07-11 16:51:40

标签: 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']

1 个答案:

答案 0 :(得分:2)

您需要使用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()