我使用pywin32擴展來訪問Python下的win32 API。我是用Python進行Windows編程的新手 - 我是POSIX的人 - 所以我可能會以一種頭腦的方式做事。使用win32file.ReadFile從管道獲取輸出的正確方法是什麼?
我試圖正確使用win32file.ReadFile函數,並且在解釋可能的結果代碼時遇到了一些麻煩。
我打電話的功能是這樣的:
result, data = win32file.ReadFile(child_stdout_r, 4096, None)
我讀一個孩子的過程,我啓動的輸出。我獲得了很好的數據,但是我擔心管道中的數據可能會超過4096個字符。 (我寧願這樣做,而不是僅僅選擇一個任意大的緩衝區大小。)
在超過4096個字符的情況下,我需要多次運行win32file.ReadFile,直到我耗盡管道。爲了找出我是否需要多次運行ReadFile,我需要解釋結果代碼。
結果是元組(小時,串/ PyOVERLAPPEDReadBuffer),其中小時可以是0,或ERROR_MORE_DATA ERROR_IO_PENDING。
因爲我在函數調用中將重疊值設置爲None,我認爲我不需要擔心任何PyOVERLAPPEDReadBuffer的東西。 (而且因爲我得到有效的數據,我想我是對的。)
我有兩個問題小時結果變量:
- 我找不到常量ERROR_MORE_DATA值或任何地方都有ERROR_IO_PENDING。
- 的ActiveState的文檔似乎暗示0是成功和常數(無論他們是)表示失敗。該Microsoft docs狀態0表示失敗,非零表示成功,你需要運行GetLastError函數,以瞭解更多信息。
什麼是正確的方法來做到這一點?
編輯補充:我不使用子,因爲我需要的子進程添加到作業對象的創建。目標是如果父進程死亡,讓所有子進程立即死亡。通過向作業對象添加子進程,當作業對象的最後一個句柄關閉時,子進程將終止。由父母持有的手柄將在父母退出時關閉。就我所知,所有這些都阻止了我使用子進程。
我想我愛你,jdigital。 ;-) 謝謝! – Schof 2010-01-16 02:06:27
我必須承認這對我來說是第一次。 Blush ;-) – jdigital 2010-01-16 06:08:40