Python を使用して単純な C++ プログラムを制御しようとしています。このプログラムは、ユーザーに入力を求めることによって機能します。プロンプトは必ずしも endl で終了するとは限りません。私が知りたいのは、C ++プログラムが出力を生成しなくなり、入力の要求に切り替えたことをpythonから伝える方法があるかどうかです。簡単な例を次に示します。
c++
#include <iostream>
using namespace std;
int main()
{
int x;
cout << "Enter a number ";
cin >> x;
cout << x << " squared = " << x * x << endl;
}
パイソン:
#! /usr/bin/python
import subprocess, sys
dproc = subprocess.Popen('./y', stdin=subprocess.PIPE,stdout=subprocess.PIPE, stderr=subprocess.PIPE)
while (True) :
dout = dproc.stdout.read(1)
sys.stdout.write(dout)
dproc.stdin.write("22\n")
この種の動作はしますが、dproc.stdin への書き込みが多すぎます。代わりに私が探しているのは、プログラムが入力の準備ができるまでdproc.stdout からすべてを読み取り、次に dproc.stdout に書き込む方法です。
可能であれば、C++ コードを変更せずにこれを行いたいと思います。(ただし、C++側でバッファリングを試してみましたが、役に立たなかったようです)
ご回答ありがとうございます。