QProcess liest nicht alle Ausgaben des Prozesses

Alles rund um die Programmierung mit Qt
Antworten
michibr
Beiträge: 7
Registriert: 20. Dezember 2008 10:39

QProcess liest nicht alle Ausgaben des Prozesses

Beitrag von michibr »

Hallo!

Ich habe folgendes Problem mit QProcess.
Ich möchte ein Backup-Programme für Ubuntu erstellen.
Zu diesem zweck sollen mit dpkg --get-selections die installierten Pakete ausgelesen un in einer Textdatei gespeichert werden.
Hier mein Code:

Code: Alles auswählen

.
.
.
lst_packages = new QFile("list_packages.txt");	
		lst_packages->open(QFile::WriteOnly | QFile::Truncate);
		
		packages = new QProcess();
		packages->start("dpkg", QStringList() << "--get-selections");
		connect (packages, SIGNAL(readyReadStandardOutput()),this,SLOT(read_process()));
		}}	
}

void savWidget::read_process()
{
	QByteArray line;
	line = packages->readLine();

	QString output(QString::fromLatin1(line));
	
	
		QTextStream stream_packages(lst_packages);
		stream_packages << output;
}
nun habe ich hier das Problem, dass nicht alle Ausgaben des Prozesses in die Textdatei geschrieben werden. Beim Vergleich, wenn ich den Befehl in der Konsole ausführe werde alle Pakete von A-Z angezeigt.
In der Textdatei stehen meist nur die Pakete mit den Anfangsbuchstaben A-C,F oder maximal G.
Ich habe das Gefühl, dass der Prozess irgendwann abgebrochen wird.
Denn wenn ich nur nach Paketen mit z.B. A* suche werden alle gelistet.

Ein Fehler wird allerdings nicht vom Prozess ausgegeben...

Weiß hier jemand Rat?
st0ff
Beiträge: 4
Registriert: 20. März 2009 17:38

Idee

Beitrag von st0ff »

Hi,

also ich hätte 2 Ideen, wobei die erste wohl eher unwichtig ist...
1.) es kommen auch Ausgaben über stderr -> könnte sein, dass du diese so nicht bekommst
2.) readline() könnte dein Problem sein. Ich würde es eher mit QByteArray QProcess::readAllStandardOutput () probieren ...

Hoffentlich hilfts,
St0fF
What's the difference 'tween a GForce and a VIC - the age!
michibr
Beiträge: 7
Registriert: 20. Dezember 2008 10:39

Beitrag von michibr »

Danke!
Hinweis 2 mit readAllStandardOutput() war die Lösung!!
Antworten