2011-09-23 150 views
0

我寫了一個python程序,它通過管道重定向來讀取另一個進程的stdout。什麼是Windows錯誤0「ERROR_SUCCESS」是什麼意思?

print "[Input Thread] ", self.inputPipe.readline(ii) 

該錯誤是IO錯誤:: 但是,程序在此行抽吸[錯誤0]錯誤

我發現窗口的說明errno設置爲0。這使得混淆,因爲它定義爲:

The operation completed successfully.

爲什麼操作成功完成會導致錯誤?

+0

通常,當你的錯誤代碼'0',通常表示成功(如沒有問題)。顯然,無論你在那裏做了什麼,都認爲出現了問題,並在沒有一個問題時打印出「錯誤信息」。 –

+2

'ERROR_SUCCESS'表示WinAPI中的「無錯誤」。它的前綴是ERROR_,它與「定義命名空間」相同。我會更加關注IOError位,儘管我不知道是什麼原因造成的。 – 2011-09-23 04:49:19

回答

1

我知道這是有點古老,但花了相當多的時間試圖找到一個完整的答案沒有成功。所以我想我會分享我的想法。

發生這種情況的完整答案是當您調用「失敗」的pInvoke方法但不是因爲錯誤。

搞起你認爲

例如假設你需要解開一個窗鉤,但這樣做的因位的意大利麪條或在你的對象架構防禦式編程的偏執水平打了兩次電話。

// hook assigned earlier 

// now we call our clean up code 
if (NativeMethods.UnhookWindowsHookEx(HookHandle) == 0) 
{ 
    // method succeeds normally so we do not get here 
    Log.ReportWin32Error("Error removing hook", Marshal.GetLastWin32Error()); 
} 

// other code runs, but the hook is never reattached, 
// due to paranoid defensive program you call your clean up code twice 
if (NativeMethods.UnhookWindowsHookEx(HookHandle) == 0) 
{ 
    // pInvoke method failed (return zero) because there was no hook to remove 
    // however there was no error, the hook was already gone thus ERROR_SUCCESS (0) 
    // is our last error 
    Log.ReportWin32Error("Error removing hook", Marshal.GetLastWin32Error()); 
}