2011-09-23 16 views
0

パイプリダイレクトによって別のプロセスのstdoutを読み込むPythonプログラムを書いています。 しかし、プログラムがこのラインで吸う:ウィンドウエラー0 "ERROR_SUCCESS"は何を意味しますか?

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

エラーは例外IOErrorです:

:[errnoを0]エラー

私はそれのように定義されているため、Windowsのエラー番号0の説明はそれが混乱せました

The operation completed successfully.

正常に完了した操作でエラーが発生するのはなぜですか?

+0

は通常、それは一般的に成功を示します。明らかにあなたが何をしたのかは問題があると思っていて、実際にはなかったときには「エラーメッセージ」が表示されました。 –

+2

'ERROR_SUCCESS'はWinAPIで「エラーなし」を意味します。同じ人工の "名前空間を定義する"ために、接頭辞ERROR_が付いています。私はIOErrorビットにもっと注意を払いますが、何が原因かわかりません。 –

答えて

1

私はこれが昔のことだと知っていますが、成功せずに完全な答えを見つけるためにかなりの時間を費やしています。だから、私が分かったことを分かち合いたいと思った。

どのように起こるかの完全な答えは、あなたが「失敗」したpInvokeメソッドがエラーのためではなくなったときです。

あなたが例えば

は、Windowsのフックを外しする必要がありますが、それが原因スパゲッティのビットまたはオブジェクト・アーキテクチャの防御的プログラミングの偏執的なレベルに二回呼び出されると言うことができますだと思いハァッ。

// 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()); 
}