subprocess似乎无法在pyinstaller exe文件中工作

时间:2018-05-22 08:35:06

标签: python tkinter

当我使用pycharm运行时,我在tkinter中的程序运行良好, 当我使用pyinstaller pyinstaller -i"icon.ico" -w -F script.py创建exe文件时,我没有错误。 我将script.exe粘贴到与我的script.py相同的文件夹中,并且在运行之后我认为步骤suprocess他没有回答,因为我在子代理行之前有print及其工作。

谁知道为什么?

这是子进程的行:

import subprocess
from subprocess import Popen, PIPE
 s = subprocess.Popen([EXE,files,'command'],shell=True, stdout=subprocess.PIPE)

编辑: 同样的问题:

s = subprocess.check_output([EXE,files,'command'],shell=True, stderr=subprocess.STDOUT)

4 个答案:

答案 0 :(得分:6)

您可以在-w模式或--windowed下编译代码,但随后还必须分配stdin和stderr。

所以改变:

s = subprocess.Popen([EXE,files,'command'],shell=True, stdout=subprocess.PIPE)

收件人:

s = subprocess.Popen([EXE,files,'command'],shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)

答案 1 :(得分:2)

通过不使用-w命令从.py脚本生成exe文件来解决问题。

答案 2 :(得分:0)

使用此函数来获取命令的输出。与-F和-w选项一起使用:

import subprocess
def popen(cmd: str) -> str:
    """For pyinstaller -w"""
    startupinfo = subprocess.STARTUPINFO()
    startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
    process = subprocess.Popen(cmd,startupinfo=startupinfo, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
    return decode_utf8_fixed(process.stdout.read())

答案 3 :(得分:0)

我收到错误 [WinError 6] The handle is invalid 运行线路时

data = subprocess.check_output(['netsh', 'wlan', 'show', 'profiles']).decode('utf-8').split('\n')

这为我解决了: https://stackoverflow.com/a/43606682/12668094