Подпроцесс модуля не имеет атрибута "STARTF_USESHOWWINDOW"

Привет, пользователи,

Я столкнулся с расстраивающей проблемой, не могу найти ответ на нее.

Вчера я пытался найти способ скрыть подпроцесс. Так, например, если я открывал cmd. Я бы хотел, чтобы это было скрыто, навсегда.

Я нашел этот код:

kwargs = {}
if subprocess.mswindows:
     su = subprocess.STARTUPINFO()
     su.dwFlags |= subprocess.STARTF_USESHOWWINDOW
     su.wShowWindow = subprocess.SW_HIDE
     kwargs['startupinfo'] = su 
subprocess.Popen("cmd.exe", **kwargs)

Он работал как шарм!

Но сегодня, по причинам, которые мне не нужны, мне пришлось переустановить python 3 (32bit)

Теперь, когда я запускаю свою программу, я получаю эту ошибку:

Traceback (most recent call last):
  File "C:\Python31\hello.py", line 7, in <module>
    su.dwFlags |= subprocess.STARTF_USESHOWWINDOW
AttributeError: 'module' object has no attribute 'STARTF_USESHOWWINDOW'

Я использую 32bit, python3.1.3... как и раньше.

Если у вас есть какие-либо подсказки/альтернативы, ПОЖАЛУЙСТА, опубликуйте, спасибо.

ПРИМЕЧАНИЕ. Я ищу метод SHORT, чтобы скрыть приложение, а не две страницы кода.

Ответ 1

python 3.1.3 > и 2.7

import subprocess
import sys

params = dict()
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
params['startupinfo'] = startupinfo

p = subprocess.Popen("cmd.exe", **params)

Ответ 2

Вы можете воссоздать или проверить описанную проблему в вашей установке Python:

import subprocess
subprocess.STARTF_USESHOWWINDOW

Если проблема не устранена, вы должны получить сообщение об ошибке, заканчивающееся на строку следующим образом:

AttributeError: 'module' object has no attribute 'STARTF_USESHOWWINDOW'

Возможное решение проблемы заключается в том, чтобы импортировать в свою старую библиотеку кода следующим образом:

import subprocess
import _subprocess

И позже использовать его только для этих двух проблемных свойств:

# do not show window
info = subprocess.STARTUPINFO()
info.dwFlags = _subprocess.STARTF_USESHOWWINDOW
info.wShowWindow = _subprocess.SW_HIDE

Что это. Простой и функциональный - без какой-либо деинсталляции/установки Python или возврата к старым сборкам.

Ответ 3

Либо переустановка пошла не так, либо вы создали модуль под названием subprocess.py и забыли его.:)

Попробуйте следующее:

import subprocess
print(subprocess.__file__)

Это должно дать вам путь к текущему подпроцессу установки Windows, т.е.

C:\Python31\Lib\subprocess.pyc

Если он вместо этого говорит

C:\PYthon31\subprocess.py

Импортирует созданный вами модуль. (Возможно, вы захотите рассмотреть вопрос о том, чтобы не помещать файлы Python в каталог Python, как в вашем примере выше. Наличие отдельной директории для каждого проекта является лучшей идеей и может означать, что вам не нужно устанавливать Python так часто.;) )

Ответ 4

Я неправильно понял вопрос, извините. Возможно, у вас есть что-то, затеняющее либо модуль subprocess, либо _subprocess. Если это ошибка установки, попробуйте удалить и переустановить Python 3.