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

时间:2011-01-16 05:31:15

标签: python python-3.x subprocess

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)

它就像一个魅力!

但是今天,由于我不需要进入的原因,我不得不重新安装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'

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

如果您有任何线索/替代方案,请发帖,谢谢。

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

4 个答案:

答案 0 :(得分:11)

您可以在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或恢复旧版本。

答案 1 :(得分:3)

重新安装出错或者您创建了一个名为subprocess.py的模块并忘记了它。 :)

尝试以下方法:

import subprocess
print(subprocess.__file__)

这应该为您提供当前Windows安装子进程模块的路径,即

C:\Python31\Lib\subprocess.pyc

如果它改为

C:\PYthon31\subprocess.py

它正在导入您创建的模块。 (您可能需要考虑将Python文件放在Python目录中,如上例所示。为每个项目设置一个单独的目录是一个更好的主意,可能意味着您不必经常安装Python。;))

答案 2 :(得分:1)

我误解了这个问题,对不起。您可能会在subprocess_subprocess模块中隐藏某些内容。如果是安装故障,请尝试删除并重新安装Python 3。

答案 3 :(得分:1)

python 3.1.3&gt;和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)