Seite 2 von 2

Re: Probleme mit QProcess

Verfasst: 31. Januar 2012 17:41
von TerraG
Hi nochmal,

hat sich jetzt doch was geändert. Hatte zuvor die falsche Anwendung verwendet, folglich konnte es nicht funktionieren. Nun könnte ich es so machen, dass ich mit QProcess ein Shell-Skript aufrufe und dieses ausgeführt wird. Ist das denn möglich? oder müsste ich dafür einen anderen Weg gehen?

Alternativ könnte ich natrürlich auch alle Befehle aus dem Shellskript einzeln mit QProcess ausführen.

Re: Probleme mit QProcess

Verfasst: 1. Februar 2012 10:42
von brax
Ja, man kann Shellskripte per QProcess ausführen. Am besten ist, Du probierst es einfach aus.

Re: Probleme mit QProcess

Verfasst: 1. Februar 2012 11:59
von TerraG
Da mein letzter Beitrag ja etwas dürftig war xD hier der Code den ich verwenden wollte um das ShellSkript zu starten:

Code: Alles auswählen

    QString program = "/bin/sh";
    QString shellDatei = Hauptordner + "/Shell.sh";
    QProcess *myProcess = new QProcess(this);
    myProcess->setStandardInputFile(shellDatei);
    myProcess->start(program);
Passiert aber leider nichts, d.h. Kompilieren geht, aber kein Resultat bei Ausführung des Quelltextes. Vielleicht einen Tipp woran es liegen könnte?

Re: Probleme mit QProcess

Verfasst: 1. Februar 2012 12:28
von brax
Mach doch mal bitte endlich, was ich jetzt schon zwei mal geschrieben habe. Benutze waitForStarted und wenn es false zurückliefert, dann benutze QProcess::error, um herauszufinden was schief gegangen ist.

Bist Du Dir sicher, dass Du setStandardInputFile benutzen möchtest und nicht das Shellskript als Argument übergeben möchtest? Hast Du mal geschaut, ob "/bin/sh" als Kindprozess Deines Programms läuft (das nehme ich nämlich an, nur wartet es auf eine Eingabe).

Wenn das .sh file das Executable flag gesetzt hat, kannst Du es auch direkt an QProcess geben...

Re: Probleme mit QProcess

Verfasst: 1. Februar 2012 16:30
von TerraG
Folgendermaßen hab ich es jetzt versucht und keinerlei Ausgabe bekommen:

Code: Alles auswählen

QString program = "/bin/sh";
    QString shellDatei =  erstellterHauptordner + "/Shell.sh";
    QProcess *myProcess = new QProcess(this);
    myProcess->setStandardInputFile(shellDatei);
    myProcess->start(program);
    if (!myProcess->waitForStarted())
             return false;
    QProcess::ProcessError Error = myProcess->error ();
    return Error;
Ich werd jetzt halt nochmal schaun, ob es was bringt das Shellskript als Argument Typ QStringList zu übergeben.

Nachtrag: "gedit" konnte ich problemlos mit dem Quelltext auf das Shellskript anwenden, nur funktioniert es halt nicht mit "sh", was es aber unbedingt muss.

Re: Probleme mit QProcess

Verfasst: 1. Februar 2012 17:10
von brax
Du solltest die Abfrage nach error dann machen, wenn waitForStarted false zurückliefert.

Wenn Du das return wirklich an der Stelle hast, wirst Du Deinen QProcess niemals löschen können -> Speicherloch

Versuch das mit den Argumenten nochmal. Wenn Du auf der Konsole ein Shellskript direkt mit /bin/sh ausführen willst gibst Du doch auch ein:
/bin/sh meinshellskript.sh
Nichts anderes macht

Code: Alles auswählen

QStringList args;
args << shellDatei;
myProcess->start(program,args);

Re: Probleme mit QProcess

Verfasst: 1. Februar 2012 17:49
von TerraG
HI,

dass mit dem Argument habe ich jetzt auch überprüft, ergab aber keine Änderung:

Code: Alles auswählen

QString program = "/bin/sh";
QString shellDatei = erstellterHauptordner + "/Shell.sh";
QProcess *myProcess = new QProcess(this);
myProcess->start(program,QStringList()<<shellDatei);
So, dann hab ich versucht das ShellSkript im Terminal zu starten. Das Terminal sagt mir zwar beim Schließen, dass ein Prozess läuft, schaue ich aber in der Systemüberwachung dann hab ich nur eine "schlafende" sh Anwendung (die Anwendung wird nie fertig und erstellt auch nichts). Ich denke das ganze könnte mit den Zugriffsrechten auf neu erstellte Dateien zusammenhängen, da bei diesen "0002" bei mir voreingestellt sind, was ich im Terminal mit "umask" überprüft habe. Leider weiss ich noch nicht wie ich das ändere.

Re: Probleme mit QProcess

Verfasst: 1. Februar 2012 18:55
von TerraG
So,

hab mit jetzt mit chmod +x Shell.sh die Zugriffsrechte auf die Shell Datei gegeben.

1. Versuch mit QProcess

Code: Alles auswählen

QString program = "/bin/sh";
QString shellDatei = erstellterHauptordner + "/Shell.sh";
QProcess *myProcess = new QProcess(this);
myProcess->start(program,QStringList()<<shellDatei);
--> Keinerlei Ergebnis! Ich denke es hat etwas mit der Anwendung "/bin/sh", schließlich wurde "gedit" auch einwandfrei ausgeführt. ---> KORRIGIERT: siehe mein nächster Beitrag.

2.Versuch mit system():

Code: Alles auswählen

QString Datei = erstellterHauptordner + "/Shell.sh"; //möglich mit chmod +x [Shelldatei] im Terminal !!!!!!!!
std::string Ziel = Datei.toStdString();
system(Ziel.c_str());
--> ShellScript wird ausgeführt! Es kommt zwar noch zu einigen Fehlermeldungen, aber der erste Befehl der ShellDatei läuft schonmal einwandfrei, beim zweiten gibts leider einen Fehler, folglich bei den folgenden auch....

Frage mich nun, ob ich an dieser Stelle nicht wirklich mir system() as der Library stdlib.h weiter arbeiten soll, da ich mit QProcess ja nicht voran komme!

Re: Probleme mit QProcess

Verfasst: 1. Februar 2012 19:22
von TerraG
Nachtrag:

Ok, mit QProcess läuft es nun auch bis zum zweiten Schritt. Läuft halt alles im Hintergrund und ich hatte beim ersten Versuch nicht lange genug gewartet. Fehler meinerseits also.

Kannst mir vielleicht noch sagen welche Methode(n) ich benötige um mir zur Laufzeit die Fehlermeldungen ausgeben zu lassen? system() gibt mir halt Fehlermeldungen im Verlauf des ShellSkriptes aus und

Code: Alles auswählen

QProcess::ProcessError Error = myProcess->error ();
return Error;
gibt mir halt nix.

Wäre ja gut wenn ich QProcess verwenden könnte, muss es halt jetzt nur erstmal dazu bringen mir die Fehlermeldungen anzuzeigen, die während der ShellSkript Abarbeitung entstehen.

Re: Probleme mit QProcess

Verfasst: 1. Februar 2012 20:47
von brax
TerraG hat geschrieben:Nachtrag:
Fehler meinerseits also.
Na das ist ja mal was neues....

Sorry, aber die Doku beschreibt ziemlich gut, wie man die Ausgabe auf std::out und std::err von einem QProcess bekommt. Lies es Dir doch bitte mal durch und probiere etwas rum. Glaub mir, es funktioniert!

Re: Probleme mit QProcess

Verfasst: 3. Februar 2012 11:33
von TerraG
Na das ist ja mal was neues....
Jo, habs ja hingekriegt :D . Problem gelöst .

Re: Probleme mit QProcess

Verfasst: 3. Februar 2012 14:41
von Herzogswalder
Endlich...

Re: Probleme mit QProcess

Verfasst: 3. Februar 2012 16:27
von TerraG
Jo, schneller als so mancher "Herzog" xD.