サブプロセスを使用して Python でプロセスを生成しており、パイプを使用してプログラムから出力を読み取りたいと考えています。ただし、明示的に閉じるように指示しても、C++ プログラムはパイプを閉じないようです。
#include <cstdlib>
#include <ext/stdio_filebuf.h>
#include <iostream>
int main(int argc, char **argv) {
int fd = atoi(argv[1]);
__gnu_cxx::stdio_filebuf<char> buffer(fd, std::ios::out);
std::ostream stream(&buffer);
stream << "Hello World" << std::endl;
buffer.close();
return 0;
}
この小さなプログラムを次の Python スニペットで呼び出します。
import os
import subprocess
read, write = os.pipe()
proc = subprocess.Popen(["./dummy", str(write)])
data = os.fdopen(read, "r").read()
print data
fd が閉じられていないため、read() メソッドは戻りません。Python で write fd を開いたり閉じたりすると、問題が解決します。しかし、それは私にはハックのようです。C++ プロセスで fd を閉じる方法はありますか?
どうもありがとう!