Seite 1 von 1
Argument kommt nicht richtig bei QProcess an!
Verfasst: 12. November 2009 21:55
von Linuxguru
Hallo,
ich habe das Problem, das mein Argument aus der Liste nicht richtig ankommt.
Hier erstmal etwas Code!
Code: Alles auswählen
QString program = "mkisofs";
QStringList burnArgs;
burnArgs << "-r" << "-J" << "-o" << "/tmp/fcImage.iso";
for(int i = 0; i < dataBurnList.count(); i++)
{
QFileInfo fi = dataBurnList.at(i);
if(fi.isDir())
{
QString graftPoint = "-graft-points " + fi.fileName() + "=" + dataBurnList.at(i);
burnArgs << graftPoint;
}
else
{
burnArgs << dataBurnList.at(i);
}
}
myProcess = new QProcess(this);
myProcess->start(program, burnArgs);
connect(myProcess, SIGNAL(readyReadStandardOutput()),this, SLOT(readOutput()));
connect(myProcess, SIGNAL(readyReadStandardError()),this, SLOT(readOutput()));
Bei QString graftPoint kommt als Ausgabe an der Konsole das -aft-Points kein gültiger Parameter ist. Kann sich jemand vorstellen, wo das "gr" von "-graft-Points" hin ist?
Wenn ich burnArgs abfrage, dann kommt der String da noch ordnungsgemäss an.
Dank im Voraus
Verfasst: 13. November 2009 17:06
von solarix
1. Ich verstehe deine Frage ("Bei QString graftPoint kommt als Ausgabe an der Konsole..") nicht, weil auf der Zeile "QString graftPoint" keine Konsolenausgabe gemacht wird (keine QDebug-Ausgabe oder sonst was..). Meinst du damit im Debugger oder so?
2. folgender Test zeigte keinerlei Probleme:
Code: Alles auswählen
QCoreApplication app(argc,argv);
QString program = "arguments";
QStringList burnArgs;
burnArgs << "-r" << "-J" << "-o" << "/tmp/fcImage.iso";
QString graftPoint = "-graft-points " + QString("X") + "=" + QString("test");
burnArgs << graftPoint;
QProcess *myProcess = new QProcess();
myProcess->start(program, burnArgs);
return app.exec();
In der Konsole:
Code: Alles auswählen
> cat arguments
echo $* >> /tmp/arguments.out
> ./processtest
^C
> cat /tmp/arguments.out
-r -J -o /tmp/fcImage.iso -graft-points X=test
>
da kommt also alles richtig an. Die einzigen Bedenken die ich haette ist, dass jede Shell eine Limitierung in der Kommandlaenge hat... (siehe Kommando "getconf ARG_MAX"). Was also, wenn "dataBurnList.count()" sehr gross ist....?
Verfasst: 13. November 2009 18:40
von Linuxguru
Danke für die Antwort.
Ich hab meine funktion nun mal auf das mindeste umgebaut.
hier mal ein stück code
Code: Alles auswählen
QString program = "genisoimage";
QStringList burnArgs;
burnArgs << "-r" << "-J" << "-o" << "/tmp/fcImage.iso";
QString graftPoint = "-graft-points " + QString("X") + "=" + QString("test");
burnArgs << graftPoint;
burnDataProcess = new QProcess(this);
burnDataProcess->start(program, burnArgs);
connect(burnDataProcess, SIGNAL(readyReadStandardOutput()),this, SLOT(readOutput()));
connect(burnDataProcess, SIGNAL(readyReadStandardError()),this, SLOT(readOutput()));
}
Wenn ich das Tool nun ausführe, meldet mir readyReadStandardOutput()
Code: Alles auswählen
genisoimage: unrecognized option `-aft-points X=test'
Usage: genisoimage [options] -o file directory ...
Use genisoimage -help
to get a list of valid options.
Report problems to debburn-devel@lists.alioth.debian.org.
genisoimage: unrecognized option `-aft-points X=test'
Usage: genisoimage [options] -o file directory ...
Use genisoimage -help
to get a list of valid options.
Report problems to debburn-devel@lists.alioth.debian.org.
Verfasst: 14. November 2009 16:56
von solarix
genisoimage: unrecognized option `-aft-points X=test'
ich habe den Eindruck, dass das 2(!) Parameter sein sollten.. oder nicht?
Ich würde daher vorschlagen:
Code: Alles auswählen
QString program = "genisoimage";
QStringList burnArgs;
burnArgs << "-r" << "-J" << "-o" << "/tmp/fcImage.iso";
burnArgs << "-graft-points" << (QString("X") + "=" + QString("test"));
burnDataProcess = new QProcess(this);
burnDataProcess->start(program, burnArgs);
Verfasst: 15. November 2009 12:14
von Linuxguru
Hallo solarix,
das mit den 2 Parametern hatte ich auch schon getestet. Irgendwie hat er was gegen das gr bei -graft-points.
Sobald ich statt -graft-points -fffaft-points nehme, erkennt er den parameter korrekt.
Hab nun testweise mal die QT Version von 4.4.3 auf 4.5.3 geändert, trotz alledem kein Erfolg.
Was könnte es jetzt noch sein?
Verfasst: 15. November 2009 19:10
von Linuxguru
Hallo solarix,
soeben hab ich es hinbekommen. So 100% kann ich den Fehler nicht nachvollziehen.
Hab mal den funktionierenden Code hier:
Code: Alles auswählen
void MainWindow::startBurnAction()
{
QString program = "genisoimage";
QStringList burnArgs;
burnArgs << "-r" << "-J" << "-o" << "/tmp/fcImage.iso" << "-graft-points";
for(int i = 0; i < dataBurnList.count(); i++)
{
QFileInfo fi = dataBurnList.at(i);
if(fi.isDir() && fi.fileName() != "..")
{
burnArgs << fi.fileName() + "=" + dataBurnList.at(i);
}
else
{
burnArgs << dataBurnList.at(i);
}
}
burnDataProcess = new QProcess(this);
burnDataProcess->start(program, burnArgs);
connect(burnDataProcess, SIGNAL(readyReadStandardOutput()),this, SLOT(readOutput()));
connect(burnDataProcess, SIGNAL(readyReadStandardError()),this, SLOT(readOutput()));
}
Hab eigentlich nur den Parameter -graft-points ausserhalb der for Schleife aufgerufen, das er nur einmal aufgerufen wird.
Da das Problem aber vorher auch bei einen einzelnen Verzeichnis lag, kann ich es nur darauf schieben, das ich jetzt nicht vorher alles in einen String speichere, sondern direkt als Argument übergebe.
Evtl sieht du noch was anderes, was den Fehler hervorgerufen haben könnte.
Solange lass ich den Beitrag noch mal auf.
MfG