Seite 1 von 1

QProcess läuft als Zombie macht aber nichts

Verfasst: 18. September 2007 21:15
von Nahasapeemapetilon20
Hallo,
ich arbeite mit QT3.3 ...habe eine kleine Gui programmiert die verschiedene Daten aus ein File einliest diese werdem dann in ein R kompatibles Format umgeschrieben und in eine Datei ablegt ...danach kann der Anwender sich über die Gui verschiedene Option zurecht klicken daraufhin baut die GUI ein Skript, das die nötigen Anweisungen für R beinhaltet um mit den Daten zu arbeiten... R ist ein Statistikprogramm welches man über die Konsole steuern kann. Mein Plan war es jetzt R als Prozess im 'Hintergrund zu starten uns das Skript über Stdin an R zu übergeben.... R macht leider gar ncihts läuft nur als Zombie . Das Skript was erzeugt wird hab ich getestet und das läuft auch allein mit R problemlos. Nun kann es manchmal auch vorkommen das R Fenster anzeigt obwohl es eine Konsolenanwendung ist , können diese Fenster angezeigt werden falls R mit Qprogress gestartet wurde? Nach den schreiben auf die Stdin kommt nichts über die Stdout bzw keine Rückmeldung entweder Funktioniert das so einfach nicht oder ich mach irgendwas falsch.... hier mal der Code

Code: Alles auswählen

//.....
proc = new QProcess( this );
proc->addArgument( "R" );
connect( proc, SIGNAL(readyReadStdout()),
         this, SLOT(readFromStdout()));
   
if ( !proc->start() )
    qDebug("FehlerbeimStarten");
    //proc->setCommunication(QProcess::Stdin);
for(QStringList::Iterator it = mRScript.begin();it != mRScript.end();it++) 
   {
    qDebug("%s",(*it).latin1());    
    proc-> writeToStdin((*it));
   }
if(proc->isRunning())
   qDebug("%s","laeuft");
//....

 void probe2ROptionW::readFromStdout()
  {
    qDebug("Hage?"); 
    QString temp(proc->readStdout());
    qDebug("%s",temp.latin1() ); 
  }

Verfasst: 19. September 2007 11:25
von FlorianBecker
Ich benutzte zwar kein Qt3 mehr, aber bei Qt4 gibt es Signale, die man nutzt um solche Probleme zu testen oder generell zu umgehen. Ich bin mit nicht ganz sicher, glaube aber, dass es diese Signale schon zu Qt3 Zeiten gab. Verbinde deinen Process mit einem passenden Signal und dir wird eine evtl. Fehlersuche leichter fallen.

Verfasst: 19. September 2007 13:16
von m0le
Gibts nen bestimmtem Grund dafür, dass du Qt3 benutzt?

Bei 4 ist der QProcess ein bischen anders aufgebaut, da gibts nützliche Funktionen wie waitForReadyRead(), die das synchronisiseren zwischen Vater- und Kindprozess vereinfachen.

Verfasst: 20. September 2007 19:33
von Nahasapeemapetilon20
ok danke für die Antwort...ich schau es mir jetzt noch mal an.....
wenn es nicht klappt muss ich R halt im Batch mode betreiben, würde mir aber nicht so gefallen

QT3.3 weil ich für 4 keine Lizenz besitze ;)
lg

Verfasst: 20. September 2007 23:24
von m0le
Keine Lizenz?

Es gibt doch auch die OpenSource-Variante...

Verfasst: 21. September 2007 07:26
von macman
m0le hat geschrieben:Es gibt doch auch die OpenSource-Variante...
Das ist ja ne tolle Option, wenn man Software verkaufen möchte :-)

Verfasst: 21. September 2007 07:57
von m0le
Es hat ja keiner was davon gesagt, dass er die Software die er da zusammenschustert kommerziell vermarkten will...