다음 Python 코드가 있습니다.이 Python 코드는 C++ 프로그램에 초기 입력을 제공 한 다음 출력을 가져 와서 프로그램이 끝날 때까지 다시 제공합니다 완료 실행 :Python : C++ 명령 행 프로그램과의 통신이 작동하지 않습니다. <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에 첫 번째 호출에 응답하지 않는다(). I가 실행 전에 test__2.exe 전체 입력을 공급하면이 문제가 발생하지 주 (즉 초기 설정 X = '1 \ N2 \ N3 \ n')이 문제의 원인이 될 수있는 것을
?
(또한, comm.py 그렇게 만 iostream이 허용 솔루션이 아닐 것이다 사용하여 유효한 C++ 프로그램을 처리 할 수 있어야합니다.)편집 : 나는 또한 Windows에서 작업 할 수있는 솔루션이 필요합니다.
이것은 유효한 해결책이지만, 유효한 C++ 프로그램을 사용하려면 comm.py가 필요하므로 불행히도 내 문제는 해결되지 않습니다. ostream을 플러시 할 때 다음 줄이 표시되지 않는 이유는 무엇입니까? p.stdout.flush() ? –
@ black-goat 예, 나는 그것을 숙고하고 있었지만 아직도 있습니다. 업데이트를 참조하십시오. –
입력 해 주셔서 감사합니다. 슬프게도 나는 Windows에서도 작동해야한다고 언급하는 것을 잊어 버렸지 만, 나는 당신의 제안에 대한 아날로그를 찾으려고 노력할 것이다. –