Python3:带有infile和outfile的Popen不会在infile结束时停止

时间:2019-01-01 07:29:35

标签: python-3.x subprocess

  • 我想调用一个交互式命令行程序(使用cin / cout的c ++)。
  • 我想通过输入文件定义输入。
  • 我希望将输出写入输出文件中。
  • 使用完输入文件中的所有输入后,即使已执行的程序自然可以运行,也应将其终止。
  • 目标计算机是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()
  • 我也用call代替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代码将停止运行。 相反,最后一行被重复用作输入(任意*次),或者程序在中间终止。

*任意:输出文件始终恰好有400行。

0 个答案:

没有答案