パイプリダイレクトによって別のプロセスの標準出力を読み取るPythonプログラムを作成しました。ただし、プログラムは次の行を吸い込みます。
print "[Input Thread] ", self.inputPipe.readline(ii)
エラーはIOErrorです:[Errno0]エラー
私はwindowserrno0の説明を見つけました。それは次のように定義されているので混乱します:
操作は正常に完了しました。
操作が正常に完了するとエラーが発生するのはなぜですか?
パイプリダイレクトによって別のプロセスの標準出力を読み取るPythonプログラムを作成しました。ただし、プログラムは次の行を吸い込みます。
print "[Input Thread] ", self.inputPipe.readline(ii)
エラーはIOErrorです:[Errno0]エラー
私はwindowserrno0の説明を見つけました。それは次のように定義されているので混乱します:
操作は正常に完了しました。
操作が正常に完了するとエラーが発生するのはなぜですか?
名前にだまされるかもしれませんが、ERROR_SUCCESS は実際にはエラーがなかったことを意味します。https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382.aspx
から:
ERROR_SUCCESS
0 (0x0)
操作は正常に完了しました。
私はこれがちょっと古いことを知っていますが、成功せずに完全な答えを見つけようとしてかなりの時間を費やしました. そこで、わかったことをシェアしたいと思います。
これがどのように発生するかについての完全な答えは、呼び出した pInvoke メソッドが「失敗」したが、エラーが原因ではない場合です。
え?
たとえば、windows フックをアンフックする必要があるとしますが、オブジェクト アーキテクチャの防御的プログラミングのちょっとしたスパゲッティまたはパラノイア レベルが原因で、2 回呼び出されます。
// 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());
}