2013-08-05 47 views
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

+0

不用說你錯過了從文檔中的線......(即首先創建'si'的人嗎? ) –

+0

是忘了在示例中添加它。 si = subprocess.STARTUPINFO() – Maxi

回答

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 
+0

我在windows上 – Maxi

+0

然後你需要提供更多的證據;追溯異常,如何安裝Python,如果您使用的是Cygwin。您的'解決方法'不是一個適當的問題解決方案。 –

+0

我知道這不是一個適當的解決方法。可能是重新安裝會修復它。有人遇到同樣的問題? – Maxi

0

我找到了一種方法做它:

subprocess._subprocess.STARTF_USESHOWWINDOW

+0

如果'subprocess._subprocess'工作,但常量本身沒有被導入到'subprocess'中,那麼這個模塊的導入過程就會出現問題。什麼'輸入sys;打印sys.platform'給? –

+0

是的確實是錯的 – Maxi

+0

這給了我'win32' – Maxi