Seite 1 von 1

Komisches Verhalten von QProcess[gelöst]

Verfasst: 4. Juni 2007 19:38
von guybrush
Hallo liebe Gemeinde,

Ich kämpfe hier den ganzen Nachmittag mit einem ganz merkwürdigem Problem in Verbindung mit QProcess.

Prinzipiell funktioniert es, wenn ich jedoch bestimmte Parameter dem Prozess übermittle, dann wird das externe Programm fehlerhaft gestartet.

OK. Konkret zum Code und Problem: Ich möchte im Prinzip spumux aus meiner Anwendung starten. Folgender Code:

Code: Alles auswählen

QString program = "spumux";
QStringList arguments;
arguments << "menu1-spumux.xml" << "< menu1-background.mpg >" << "menu1-final.mpg";

mSpumux->start(program, arguments);
mSpumux wird im Konstruktor der Klasse mit

Code: Alles auswählen

mSpumux = new QProcess(this);
initialisiert.

Wenn ich jetzt meine App starte, dann sehe (entsprechende Signale fange ich ab, z.B. readyReadStandardOutput()) ich dass spumux wirklich gestartet wird. Aber die Argumente, welche ich diesem Prozess übermittelte, werden nicht vernünftig verwendet. Jedenfalls gibt spumux Fehlermeldungen aus. Starte ich hingegen spumux auf der Konsole mit eben genau diesen Parametern, dann sehe ich dass es funktioniert.

Nun dachte ich mir ok, dann schreibe ich halt ein Skript, welches im wesentlichen aus dem folgenden Code besteht:

Code: Alles auswählen

#!/bin/sh
spumux $1 < $2 > $3
Wenn ich das Skript aufrufe mit dem obigen Code, nur ohne diese "<" und ">"-Zeichen, dann funktioniert alles wunderbar. Ist aber ne blöde Lösung, weil ich schon gern spumux direkt in meiner Anwendung aufrufen möchte und nicht über ein Mittlerskript.

Was sagt ihr dazu? Hattet ihr mit QProcess ein ähnliches Problem? Oder hat für mich jemand einen Tipp, ich bin mittlerweile ziemlich ratlos. Auch ein benutzen der alten Q3Process-Klasse ergab kein Erfolg.

Liebe Grüße,
Guybrush

PS:

System: Debian Linux 4.0
Qt: 4.2.1

Verfasst: 4. Juni 2007 19:54
von Christian81
'<' und '>' sind Befehle der Shell. Unter Qt gibts dafür QIODevice::write() und QIODevice::read() bzw. siehe QProcess Doku.
Ausserdem wird in deinem Fall '< menu1-background.mpg >' als ein Argument interpretiert was es ja nicht ist.

Danke

Verfasst: 4. Juni 2007 19:58
von guybrush
Ja ich bin ein richtiger Depp. Alles Klar!

sh -c "spumux ..." ist die Lösung die ich

im QProcess aufrufen muß. Dann klappts auch. Danke Christian!