模块子进程没有属性'STARTF_USESHOWWINDOW'

Rhy*_*hys 10 python subprocess python-3.x

Hi Stack Overflow用户,

我遇到了一个令人沮丧的问题,找不到答案.

昨天我试图找到一种隐藏子进程的方法.Popen.例如,如果我打开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)
Run Code Online (Sandbox Code Playgroud)

它就像一个魅力!

但今天,由于我不需要进入的原因,我不得不重新安装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'
Run Code Online (Sandbox Code Playgroud)

我正在使用32位,python3.1.3 ......就像之前一样.

如果你有任何线索/替代品请发布,谢谢.

注意:我正在寻找一种SHORT方法来隐藏应用程序,而不是请两页代码

小智 11

您可以在Python安装中重新创建或检查所描述的问题:

import subprocess
subprocess.STARTF_USESHOWWINDOW
Run Code Online (Sandbox Code Playgroud)

如果问题仍然存在,您应该收到以这样的行结尾的错误消息:

AttributeError: 'module' object has no attribute 'STARTF_USESHOWWINDOW'
Run Code Online (Sandbox Code Playgroud)

问题的可能解决方案是通过以下方式导入代码旧库:

import subprocess
import _subprocess
Run Code Online (Sandbox Code Playgroud)

后来只将它用于这两个有问题的属性:

# do not show window
info = subprocess.STARTUPINFO()
info.dwFlags = _subprocess.STARTF_USESHOWWINDOW
info.wShowWindow = _subprocess.SW_HIDE
Run Code Online (Sandbox Code Playgroud)

而已.简单而实用 - 无需卸载/安装Python或恢复旧版本.


Rhy*_*hys 1

蟒蛇 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)
Run Code Online (Sandbox Code Playgroud)