QProcess läuft als Zombie macht aber nichts

Alles rund um die Programmierung mit Qt
Antworten
Nahasapeemapetilon20
Beiträge: 20
Registriert: 13. August 2007 18:42

QProcess läuft als Zombie macht aber nichts

Beitrag 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() ); 
  }
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag 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.
m0le
Beiträge: 11
Registriert: 7. September 2007 15:51

Beitrag 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.
Nahasapeemapetilon20
Beiträge: 20
Registriert: 13. August 2007 18:42

Beitrag 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
m0le
Beiträge: 11
Registriert: 7. September 2007 15:51

Beitrag von m0le »

Keine Lizenz?

Es gibt doch auch die OpenSource-Variante...
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

m0le hat geschrieben:Es gibt doch auch die OpenSource-Variante...
Das ist ja ne tolle Option, wenn man Software verkaufen möchte :-)
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
m0le
Beiträge: 11
Registriert: 7. September 2007 15:51

Beitrag von m0le »

Es hat ja keiner was davon gesagt, dass er die Software die er da zusammenschustert kommerziell vermarkten will...
Antworten