0

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

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

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

我使用 Python 2.7

4

2 回答 2

3

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

引用相关部分

类和以下STARTUPINFO常量仅在 Windows 上可用。

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

请注意,这些常量subprocess直到 Python 2.7.2 才被添加;如果您正在运行 Python 2.7.1 或 2.7.0,则必须_subprocess直接从模块中导入它们。2.7.2 和更新的版本包括这个暴露这些常量的错误修复,但是文档错误修复没有提到这些常量被暴露的版本。

这是您可以使用的解决方法,它为您添加了这些常量:

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
于 2013-08-05T10:03:07.043 回答
0

我找到了一种方法:

subprocess._subprocess.STARTF_USESHOWWINDOW

于 2013-08-05T10:12:43.570 回答