QProcess

Alles rund um die Programmierung mit Qt
Antworten
piXelshooter
Beiträge: 43
Registriert: 25. März 2007 21:19

QProcess

Beitrag von piXelshooter »

hi.
folgender Code:

Code: Alles auswählen

#include <QProcess>
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char* argv[]){
	QProcess	program;
	QString		programName = "cmd";
	string		input;
	program.start(programName);
	while(program.state() == QProcess::Running){
		cout << '\n';
		getline(cin, input);
		program.write(input.c_str(), strlen(input.c_str()));
		QByteArray output = program.readAllStandardOutput();
		cout << output.length() << ' ' << output.constData();
	}
	cout << "End";
}
das doofe is jetzt: warum krieg ich keine ausgabe? wenigstens der standard prompt müsste doch zu sehen sein:

Code: Alles auswählen

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\>
aber nichts dergleichen. wenn ich QProcess den stdout in eine Datei schreiben lasse, sehe ich immerhin das da in der datei, aber wenn ich in den prozess schreibe: "echo hallo", kommt "hallo" wieder nicht in der datei an.

Wat mach ich falsch?
gboelter
Beiträge: 80
Registriert: 5. Dezember 2007 14:52
Wohnort: Davao City, Philippines

Re: QProcess

Beitrag von gboelter »

piXelshooter hat geschrieben: das doofe is jetzt: warum krieg ich keine ausgabe? wenigstens der standard prompt müsste doch zu sehen sein:
Also eine Ausgabe kriege ich bei Deinem Code schon, naemlich

Code: Alles auswählen

QProcess: Destroyed while process is still running.
Alerdings wuerdest Du auch unter C++ keine Ausgabe erhalten, Dir fehlt das "end" in den entsprechenden Zeilen, also z. B. so ...

Code: Alles auswählen

cout << "End" << endl;
piXelshooter
Beiträge: 43
Registriert: 25. März 2007 21:19

Beitrag von piXelshooter »

dammische gepufferte streams -.- hatte damit nie probleme...
ehm naja, ma schnell entsprechend geändert ne, ändert aber nix an der sache, und auch an besagte fehlermeldung komm ich net ran :-\
gboelter
Beiträge: 80
Registriert: 5. Dezember 2007 14:52
Wohnort: Davao City, Philippines

Beitrag von gboelter »

Versuch mal, ob es so tut, was Du willst ...

Code: Alles auswählen

#include <QProcess>
#include <iostream>
#include <string>

using namespace std;

int main(int argc, char* argv[])
{
    QProcess program;
    QString  programName = "cmd";
    //QString  programName = "gnome-terminal";
    string  input;

    program.start(programName);

    while (program.state() == QProcess::Running)
    {
        cout << '\n' << endl;
        getline(cin, input);
        program.write(input.c_str(), strlen(input.c_str()));
        QByteArray output = program.readAllStandardOutput();
        cout << output.length() << ' ' << output.constData();
    }

    program.waitForFinished();

    cout << "End" << endl;
}
Ich weiss, ist quick & dirty aber unter Linux funktioniert's schon mal. Allerdings ist mir nicht ganz klar, was Du eigentlich damit ereichen willst. Oben ruftst Du den cmd auf, der solte auch gestartret werden und das Programm wartet, bis Du den cmd wieder beendest. Deine Schleife unten macht allerdings fuer mich keinen Sinn. Andrerseits vermute ich, dass es Dir mehr um QProcess, als um die Schleife geht.

Aber wie gesagt, versuch's mal so ....
Guenther
Davao City, Philippines, Planet Earth, 28°C

Qt 4.8.1 for Linux/X11 - Open Source Edition for Application Development
piXelshooter
Beiträge: 43
Registriert: 25. März 2007 21:19

Beitrag von piXelshooter »

Vorweg: Dein Code funktioniert hier nicht, stdout gibt immer 0 byte zurück.

Ziel ist: Cmd wird gestartet. Solange Cmd läuft, wird stdin eingelesen und an Cmd gereicht und stdout von Cmd gelesen und angezeigt. später soll die anzeige nicht mehr über stdout laufen, dass ich atm cout/cin benutze liegt einfach daran, dass erst ma QProcess arbeiten soll. Darum auch die schleife, dass eben solange cmd sich durch exit nicht beendet hat noch eingaben gelesen werden.
Antworten