subprocess seems not working in pyinstaller exe file

My program in tkinter is working well when I am running it using PyCharm, when I am creating .exe file using pyinstaller,
pyinstaller -i"icon.ico" -w -F script.py
I have no errors. I am pasting script.exe in same folder as my script.py, and after running it I think in step where subprocess is, it is not answering, because I haveprint before subprocess line and its working.

Anyone know why?

This is the line with subprocess:

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

EDIT:

same problem with:

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

Solution 1:

You can compile your code in -w mode or --windowed, but then you have to assign stdin and stderr as well.

So change:

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

to:

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

Solution 2:

Use this function to get the command's output instead. Works with -F and -w option:

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())

Solution 3:

Problem was solved by not using -w command for generating exe file from .py script.