J'ai eu quelques problèmes avec EOF et stdio dans un pipeline de communication entre un processus python et un programme C++. Je n'ai aucune idée de ce que je fais de mal. Quand je vois un EOF dans mon programme, j'efface le stdin et au prochain tour j'essaie de lire dans une nouvelle ligne. Le problème est: pour une raison quelconque, la fonction getline immédiatement (à partir de la deuxième exécution toujours, la première fonctionne comme prévu) renvoie un EOF au lieu d'attendre une nouvelle entrée du processus python ... Une idée?Pipeter des problèmes EOF avec stdio et C++/Python
bien Voici le code:
#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;
}
et en python:
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"