开发者

Module subprocess has no attribute 'STARTF_USESHOWWINDOW'

Hi Stack Overflow users,

I've encountered a frustrating problem, can't find the answer to it.

Yesterday I was trying to find a way to HIDE a subprocess.Popen. So for example, if i was opening the cmd. I would like it to be hidden, permanently.

I found this code:

kwargs = {}
if subprocess.mswindows:
     su = subprocess.STARTUPINFO()
     su.dwFlags |= subprocess.STARTF_US开发者_运维百科ESHOWWINDOW
     su.wShowWindow = subprocess.SW_HIDE
     kwargs['startupinfo'] = su 
subprocess.Popen("cmd.exe", **kwargs)

It worked like a charm!

But today, for reasons I don't need to get into, I had to reinstall python 3 (32bit)

Now, when I run my program I get this error:

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'

I'm using 32bit, python3.1.3 ... just like before.

If you have any clues/alternatives PLEASE post, thanks.

NOTE: I am looking for a SHORT method to hide the app, not like two pages of code please


You can recreate or check the described problem in your Python installation:

import subprocess
subprocess.STARTF_USESHOWWINDOW

If the problem persists you should receive error message ending with line like this:

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

Possible solution of the problem is to import in your code old library by this way:

import subprocess
import _subprocess

And later use it only for these two problematic properties:

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

That's it. Simple and functional - without any uninstall/install of Python or reverting back to the old builds.


Either the reinstall went wrong or you created a module called subprocess.py and forgot it. :)

Try the following:

import subprocess
print(subprocess.__file__)

That should give you the path to your current Windows installations subprocess module, ie.

C:\Python31\Lib\subprocess.pyc

If it instead says

C:\PYthon31\subprocess.py

It's importing a module you created. (You may want to consider not putting your Python files in the Python directory, as in your example above. Having a separate directory for each project is a better idea, and might mean you don't have to install Python so often. ;) )


I had misread the question, sorry. You might have something shadowing either the subprocess or _subprocess module. If it's an install glitch, try removing and reinstalling Python 3.


python 3.1.3 > and 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)
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜