Python3: Popen с infile и outfile не останавливается в конце infile - PullRequest
0 голосов
/ 01 января 2019
  • Я хочу вызвать интерактивную программу командной строки (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 строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...