我有以下Python代码,它应该为C++程序提供初始输入,然后将其输出并反馈给它,直到程序完成执行:
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++程序测试:#include <iostream>
using namespace std;
int main()
{
for( int i = 0; i < 3; ++i )
{
int n;
cin >> n;
cout << n+1 << endl;
}
return 0;
}
#include <cstdio>
int main()
{
for( int i = 0; i < 3; ++i )
{
int n;
scanf("%d", &n);
printf("%d\n", n+1);
}
return 0;
}
当商业伙伴打开test\u 1.exe一切正常,但当它打开test\u 2.exe时,它会挂起对readline()的第一次调用。 请注意,在执行前输入整个输入时(即初始设置x='1\n2\n3\n'),不会出现此问题
是什么导致了这个问题?你知道吗
(还有,商业伙伴应该能够处理任何有效的C++程序,所以只使用IoSoW将不是一个可接受的解决方案。
编辑:我还需要解决方案,以在Windows上工作。你知道吗
它是由
<>你说你想用任何C++程序正确地工作模块,所以 您不能依赖它刷新标准输出(或标准错误) 每次写信之后。你知道吗std::endl
刷新ostream
而printf
不刷新stdout
这一事实引起的, 如您所见,将test__2.cpp
修改如下:这意味着您必须使程序的标准流无缓冲 对程序本身进行外部操作。你需要这么做 在
comm.py
中。你知道吗在Linux(或其他提供GNU核心Utils的主机)中,您可以通过 通过
stdbuf
执行程序,例如将所有的标准流解除缓冲。对于Windows,您需要 研究如何做同样的事情。暂时我不知道。你知道吗
相关问题 更多 >
编程相关推荐