当C++命令行程序不工作通信I具有以下Python代码,这是为了提供INTIAL输入到C++程序,然后取它的输出并反馈到它,直到程序完成执行:的Python:使用<cstdio>
comm.py
p = subprocess.Popen('test__1.exe', bufsize=1, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=False)
p.stdin.flush()
p.stdout.flush()
x = b'1\n'
while True:
p.stdin.write(x)
p.stdin.flush()
p.stdout.flush()
x = p.stdout.readline()
print(x)
if p.poll() != None:
break
我目前有两个简单的C++程序测试它:
test__1.cpp:
#include <iostream>
using namespace std;
int main()
{
for(int i = 0; i < 3; ++i)
{
int n;
cin >> n;
cout << n+1 << endl;
}
return 0;
}
test__2.cpp
#include <cstdio>
int main()
{
for(int i = 0; i < 3; ++i)
{
int n;
scanf("%d", &n);
printf("%d\n", n+1);
}
return 0;
}
当comm.py打开test__1.exe一切正常,但是当它打开test__2.exe它挂在第一次调用的ReadLine()。 需要注意的是,当我执行之前喂test__2.exe整个输入不会发生此问题(即初始设置X =“1 \ N2 \ N3 \ n”)
什么可能会造成这个问题?
(另外,comm.py应该能够处理任何合法的C++程序,所以只有使用的iostream不会是一个可接受的解决方案。)
编辑:我还需要解决在Windows上运行。
这是一个有效的解决方案,但遗憾的是它并没有解决我的问题,因为我需要comm.py任何有效的C++编程工作。 在冲洗ostream的,为什么犯规行: p.stdout.flush() 做? –
@ black-goat是的,我正在思考,而且还是。查看更新。 –
谢谢您的意见。可惜我忘了提及我需要它在Windows上工作,但我会尝试找到与您的建议类似的东西。 –