Probleme mit QProcess

Du bist neu in der Welt von C++? Dann schau hier herein!
TerraG
Beiträge: 81
Registriert: 13. Oktober 2011 15:23

Re: Probleme mit QProcess

Beitrag 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.
Gruß
TerraG
brax
Beiträge: 208
Registriert: 11. Mai 2010 11:22

Re: Probleme mit QProcess

Beitrag von brax »

Ja, man kann Shellskripte per QProcess ausführen. Am besten ist, Du probierst es einfach aus.
TerraG
Beiträge: 81
Registriert: 13. Oktober 2011 15:23

Re: Probleme mit QProcess

Beitrag 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?
Gruß
TerraG
brax
Beiträge: 208
Registriert: 11. Mai 2010 11:22

Re: Probleme mit QProcess

Beitrag 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...
TerraG
Beiträge: 81
Registriert: 13. Oktober 2011 15:23

Re: Probleme mit QProcess

Beitrag 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.
Gruß
TerraG
brax
Beiträge: 208
Registriert: 11. Mai 2010 11:22

Re: Probleme mit QProcess

Beitrag 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);
TerraG
Beiträge: 81
Registriert: 13. Oktober 2011 15:23

Re: Probleme mit QProcess

Beitrag 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.
Gruß
TerraG
TerraG
Beiträge: 81
Registriert: 13. Oktober 2011 15:23

Re: Probleme mit QProcess

Beitrag 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!
Zuletzt geändert von TerraG am 1. Februar 2012 19:23, insgesamt 1-mal geändert.
Gruß
TerraG
TerraG
Beiträge: 81
Registriert: 13. Oktober 2011 15:23

Re: Probleme mit QProcess

Beitrag 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.
Gruß
TerraG
brax
Beiträge: 208
Registriert: 11. Mai 2010 11:22

Re: Probleme mit QProcess

Beitrag 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!
TerraG
Beiträge: 81
Registriert: 13. Oktober 2011 15:23

Re: Probleme mit QProcess

Beitrag von TerraG »

Na das ist ja mal was neues....
Jo, habs ja hingekriegt :D . Problem gelöst .
Gruß
TerraG
Herzogswalder
Beiträge: 79
Registriert: 11. Oktober 2009 00:37
Wohnort: Dresden

Re: Probleme mit QProcess

Beitrag von Herzogswalder »

Endlich...
Gruß, Herzogswalder
Qt 4.8, OS X Mountain Lion
TerraG
Beiträge: 81
Registriert: 13. Oktober 2011 15:23

Re: Probleme mit QProcess

Beitrag von TerraG »

Jo, schneller als so mancher "Herzog" xD.
Gruß
TerraG
Antworten