Вышеупомянутый процесс по-прежнему представляет собой консольный процесс с действительными дескрипторами для ввода-вывода консоли (подтверждается вызовом GetFileType на дескрипторах, возвращаемых GetStdHandle). Он просто не имеет окна и не наследует родительскую консоль, если таковая имеется.
Вы можете идти дальше, заставляя ребенка вообще не иметь консоли:
В этом случае дочерние стандартные дескрипторы (т.е. GetStdHandle) равны 0, но вы можете установить их в файл или трубу открытого диска, например subprocess.DEVNULL (3.3) или subprocess.PIPE.
Ответ 2
Добавьте аргумент shell=True в вызовы подпроцесса.