Подпроцесс модуля не имеет атрибута «STARTF_USESHOWWINDOW» - PullRequest
10 голосов
/ 16 января 2011

Пользователи Hi Stack Overflow,

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

Вчера я пытался найти способ скрыть подпроцесс. Открыть. Так, например, если я открывал 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 (32 бита)

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

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 ... как и прежде.

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

ПРИМЕЧАНИЕ: я ищу КРАТКИЙ метод, чтобы скрыть приложение, а не две страницы кода, пожалуйста

Ответы [ 4 ]

11 голосов
/ 04 февраля 2011

Вы можете воссоздать или проверить описанную проблему в вашей установке 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 голосов
/ 16 января 2011

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

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

import subprocess
print(subprocess.__file__)

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

C:\Python31\Lib\subprocess.pyc

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

C:\PYthon31\subprocess.py

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

1 голос
/ 17 января 2011

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)
1 голос
/ 16 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...