파이썬 프로세스와 C++ 프로그램 간의 통신 파이프 라인에서 EOF 및 stdio에 몇 가지 문제가 있습니다. 내가 뭘 잘못하고 있는지 전혀 모르겠다. 프로그램에서 EOF를 볼 때 나는 표준 입력을 삭제하고 다음 라운드에서 새로운 행을 읽으려고합니다. 문제는 다음과 같습니다. getline 함수 immediatly (두 번째 실행에서 항상 처음 의도 한대로 작동 함)는 파이썬 프로세스의 새 입력을 기다리는 대신 EOF를 반환합니다. 어떤 생각입니까?stdio 및 C++/Python의 EOF 문제
#include <string>
#include <iostream>
#include <iomanip>
#include <limits>
using namespace std;
int main(int argc, char **argv) {
for (;;) {
string buf;
if (getline(cin,buf)) {
if (buf=="q") break;
/*****///do some stuff with input //my actual filter program
cout<<buf;
/*****/
} else {
if ((cin.rdstate() & istream::eofbit)!=0)cout<<"eofbit"<<endl;
if ((cin.rdstate() & istream::failbit)!=0)cout<<"failbit"<<endl;
if ((cin.rdstate() & istream::badbit)!=0)cout<<"badbit"<<endl;
if ((cin.rdstate() & istream::goodbit)!=0)cout<<"goodbit"<<endl;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max());
//break;//I am not using break, because I
//want more input when the parent
//process puts data into stdin;
}
}
return 0;
}
및 파이썬에서 : 파이썬에서
from subprocess import Popen, PIPE
import os
from time import sleep
proc=Popen(os.getcwd()+"/Pipingtest",stdout=PIPE,stdin=PIPE,stderr=PIPE);
while(1):
sleep(0.5)
print proc.communicate("1 1 1")
print "running"