我正試圖集成一個小型的Win32 C++程序,它從stdin讀取並將解碼結果(~128千字節)寫入輸出流。我應該總是明確地關閉stdout嗎?
我讀整個輸入到緩衝用
while (std::cin.get(c)) { }
我寫整個輸出到標準輸出後。
當我從命令行運行應用程序時,一切工作正常,例如test.exe <input.bin> output.bin
,但是這個小應用程序應該從Python運行。
我想到了Python subprocess.communicate
應該被使用,文檔說:
與互動的過程:將數據發送至標準輸入。從stdout和 stderr中讀取數據,直到達到文件結束。等待進程終止。
因此communicate()
將等待我的應用程序完成前等待文件結束 - 應用程序退出時是否應該發生EOF?或者我應該明確做fclose(stderr)和fclose(stdout)?
您不應該明確地釋放您未明確獲取的任何資源,除非您有特定的文檔說明否則。如果不堅持這一點,則難以解決問題。 – mah
現在我明白了這一點 - 子進程獲取自己的句柄/描述符,用於至少在子進程終止時關閉的管道的另一端。 –
無關聯:模擬'test.exe < input.bin > output.bin' shell命令,可以使用'subprocess.check_call('test',stdin = open('input.bin'),stdout = open('stdout.bin', 'w'))'即你不需要'.communicate()'。 – jfs