我正试图集成一个小型的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