Probleme mit QProcess
Re: Probleme mit QProcess
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.
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
TerraG
Re: Probleme mit QProcess
Ja, man kann Shellskripte per QProcess ausführen. Am besten ist, Du probierst es einfach aus.
Re: Probleme mit QProcess
Da mein letzter Beitrag ja etwas dürftig war xD hier der Code den ich verwenden wollte um das ShellSkript zu starten:
Passiert aber leider nichts, d.h. Kompilieren geht, aber kein Resultat bei Ausführung des Quelltextes. Vielleicht einen Tipp woran es liegen könnte?
Code: Alles auswählen
QString program = "/bin/sh";
QString shellDatei = Hauptordner + "/Shell.sh";
QProcess *myProcess = new QProcess(this);
myProcess->setStandardInputFile(shellDatei);
myProcess->start(program);
Gruß
TerraG
TerraG
Re: Probleme mit QProcess
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...
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
Folgendermaßen hab ich es jetzt versucht und keinerlei Ausgabe bekommen:
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.
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;
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
TerraG
Re: Probleme mit QProcess
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
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
HI,
dass mit dem Argument habe ich jetzt auch überprüft, ergab aber keine Änderung:
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.
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);
Gruß
TerraG
TerraG
Re: Probleme mit QProcess
So,
hab mit jetzt mit chmod +x Shell.sh die Zugriffsrechte auf die Shell Datei gegeben.
1. Versuch mit QProcess
--> 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():
--> 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!
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);
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());
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
Re: Probleme mit QProcess
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
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.
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;
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
TerraG
Re: Probleme mit QProcess
Na das ist ja mal was neues....TerraG hat geschrieben:Nachtrag:
Fehler meinerseits also.
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
Jo, habs ja hingekriegt . Problem gelöst .Na das ist ja mal was neues....
Gruß
TerraG
TerraG
-
- Beiträge: 79
- Registriert: 11. Oktober 2009 00:37
- Wohnort: Dresden