无法使用子进程常量

时间:2013-08-05 10:01:45

标签: python

我找不到子进程常量但是已经安装了包。以下代码在第二行失败。你知道为什么吗?

import subprocess
si.dwFlags = subprocess.STARTF_USESTDHANDLES | subprocess.STARTF_USESHOWWINDOW
print si.dwFlags

通常这些常量应该在包中(参见http://docs.python.org/2/library/subprocess.html)。

我使用Python 2.7

2 个答案:

答案 0 :(得分:3)

这些特定常量仅在Windows上定义。

引用relevant section

  

STARTUPINFO类和以下常量仅适用于Windows。

subprocess模块测试sys.platform;如果等于win32,则定义STARTUPINFOpywintypes类,并从_subprocess模块导入常量(仅在Windows上编译)。

请注意,在Python 2.7.2之前,这些常量未添加到subprocess;如果您运行的是Python 2.7.1或2.7.0,则必须直接从_subprocess模块导入它们。 2.7.2和更新的包括公开这些常量的this bugfix,但documentation bugfix没有提到这些常量所暴露的版本。

以下是您可以使用的解决方法,为您添加以下常量:

if not hasattr(submodule, 'STD_INPUT_HANDLE'):
    import _submodule
    _missing = (
        'STD_INPUT_HANDLE', 'STD_OUTPUT_HANDLE', 'STD_ERROR_HANDLE', 'SW_HIDE',
        'STARTF_USESTDHANDLES', 'STARTF_USESHOWWINDOW')
    for _name in _missing:
        setattr(submodule, _name, getattr(_submodule, _name))
    del _submodule, _name, _missing

答案 1 :(得分:0)

我找到了一种方法:

subprocess._subprocess.STARTF_USESHOWWINDOW