- Я хочу вызвать интерактивную программу командной строки (c ++, используя cin / cout).
- Я хочу определить ввод через файл ввода.
- Я хочу выводдля записи в выходной файл.
- После того, как все входные данные внутри входного файла будут использованы, исполняемая программа должна быть уничтожена, даже если она будет работать естественным образом.
- Целевой компьютерwindows 10.
Чтобы добиться этого, я попытался использовать следующее:
from subprocess import *
with open("input.txt", "r") as ifile:
with open("output.txt","w") as ofile:
p = Popen(["./example.exe"], stdin=ifile, stdout=ofile, stderr=None, universal_newlines=True )
p.wait()
- Я также попытался сделать это с вызовом вместо Popen, но тот же результат.
- Я также пробовал p.stdin.write / readline, но все, что я придумал, зависает (например, потому что exe-программа ожидает внутри cin) или сбивает порядок.
Этомой код cpp для тестирования:
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
string inputString("");
for (int i = 0; i< 200; ++i){
cout << "type a number: " << endl;
cin >> inputString;
if(inputString == "1"){
cout << "eins" << endl;
} else if (inputString == "2"){
cout << "zwei" << endl;
} else if (inputString == "blub"){
break;
}
else{
cout << "unknown" << endl;
}
}
return 0;
}
Я ожидаю, что этот код python перестанет работать после того, как все входные строки внутри входного файла будут использованы.Вместо этого последняя строка многократно используется в качестве входных данных (произвольное * количество раз) или программа завершается посередине.
* произвольная: Outfile всегда имеет ровно 400 строк.