【问题标题】:Module subprocess has no attribute 'STARTF_USESHOWWINDOW'模块子进程没有属性“STARTF_USESHOWWINDOW”
【发布时间】:2011-06-09 21:25:21
【问题描述】:

您好 Stack Overflow 用户,

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

昨天我试图找到一种方法来隐藏 subprocess.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'

我使用的是 32bit,python3.1.3 ... 和以前一样。

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

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

【问题讨论】:

  • 你确定你运行的是相同的代码吗?
  • same code 是的,我已经尝试卸载/重新安装很多次......如果有人可以尝试在 py3 上运行上述代码,这样我就可以确认此代码应该可以工作并且我有一个严重的问题
  • 嗨,我在 Python 2.7 上遇到了同样的问题。从 2.6 升级到 2.7 后出现此问题。我加载了正确的模块(C:\Python27\Lib\subprocess.pyc)。您知道可能出了什么问题吗?

标签: python python-3.x subprocess


【解决方案1】:

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)

【讨论】:

    【解决方案2】:

    您可以在 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】:

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

      尝试以下方法:

      import subprocess
      print(subprocess.__file__)
      

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

      C:\Python31\Lib\subprocess.pyc
      

      如果它改为说

      C:\PYthon31\subprocess.py
      

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

      【讨论】:

      • mm 子进程模块正在工作......一个简单的 subprocess.Popen 工作得很好。您建议的代码: ..... print(subprocess.__file__) ..... 返回: C:\Python31\lib\subprocess.py
      • @Rhys:那我建议你删除 C:\Python31 再做一次。
      • 好的,我会尝试将其放在其他目录或其他目录中。我已经尝试重新安装很多次了
      • @Rhys:你是不是先把 C:\Python31 彻底删除了?
      • 我从控制面板卸载并删除了剩余的文件夹。根据我收到的响应的声音,代码应该可以正常工作,所以至少我已经将其缩小为技术错误
      【解决方案4】:

      我误读了这个问题,抱歉。您可能对subprocess_subprocess 模块有一些影响。如果是安装故障,请尝试删除并重新安装 Python 3。

      【讨论】:

      • mm 子进程模块正在工作......一个简单的 subprocess.Popen 工作得很好。我已经尝试重新安装了很多次,也尝试了 reg clean
      • 谢谢你回复 TryPyPy。看来我已经自己解决了这个问题。 Python 3.1.2 完美地执行了 subprocess.STARTF_USESHOWWINDOW。 Python 3.1.3 失败,以 AttributeError 响应
      猜你喜欢
      • 1970-01-01
      • 2020-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-22
      • 1970-01-01
      • 2018-02-21
      • 1970-01-01
      相关资源
      最近更新 更多