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方法来隐藏应用程序,而不是像两页代码那样
答案 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)