Нужно чтоб питон-скритп запустил программу и через некоторое время написал строчку в программу.
Если просто представить, то есть CPP программа:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
std::string input;
int i = 0;
ofstream myfile("/var/tmp/result.txt", ios::out);
while (1)
{
std::cin >> input;
std::cout << "get: " << input << "; i = " << i << std::endl;
myfile << "get: " << input << "; i = " << i << std::endl;
i++;
if (i > 10 )
return 0;
}
}
#!/usr/bin/python
from subprocess import Popen, PIPE
import time
CMD="/home/y/test/build-console-Desktop/./myApp"
handle = Popen(CMD, shell=True, stdin=PIPE)
time.sleep(2)
print "write now"
handle.stdin.write("123")
handle.stdin.flush()
handle.stdin.close()
time.sleep(2)
Я ожидаю, что программа один раз зайдет в цикл и будет ждать пока не будет повторно что-то записано.
Но на практике я получаю вывод:
$ ./test_py/test_small.py
write now # - это пишет питон
get: 123; i = 0 # это и до конца CPP
get: 123; i = 1
get: 123; i = 2
get: 123; i = 3
get: 123; i = 4
get: 123; i = 5
get: 123; i = 6
get: 123; i = 7
get: 123; i = 8
get: 123; i = 9
get: 123; i = 10
Вопрос: как сделать чтоб CPP программа читала только 1 раз? Очень желательно без изменения CPP кода.