LINUX.ORG.RU

c++ получение текста с консоли


0

1

Привет всем.. такая задача, нужно из Qt запустить консольную программу параллельно работе Qt и не закрывая ее, давать этой программе команды, из Qt приложения, и получать ответы и вставлять например в лэйблы в Qt. Как это можно реализовать?

man popen

man QProcess (емнип)

yoghurt ★★★★★
()

открываешь два пайпа (man pipe), форкаешься (man fork), в потомке привязываешь пайпы к stdin и stdout (man dup2) и запускаешь нужную тебе программу через execl()

ananas ★★★★★
()
Ответ на: комментарий от pozitiffcat

емнип, можно. если не ошибаюсь, я сначала так и делал для теста, а потом уже в сигнал/слоты завернул (удобнее же!). (лисапедил видеоплеер через «mplayer -slave -wid …», потом плюнул и заюзал ffmpeg+opengl+alsa, но это уже совсем другая история…)

arsi ★★★★★
()
Ответ на: комментарий от arsi

тоже почему-то не работает. может что не так делаю

pozitiffcat ★★★
() автор топика
Ответ на: комментарий от arsi
 double MyFr::GetCashReg(int reg)
 {
 string comm = "getcashreg#";
 comm += ftoa(reg);
 comm += "#";
 comm += "\n";
 pr->write(encodeToKKM(comm.c_str()).c_str());
 char data[1024];
 pr->readLine(data,sizeof(data));
 return atof(data);
 }
 

делал так

pozitiffcat ★★★
() автор топика
Ответ на: комментарий от pozitiffcat
#include <QCoreApplication>
#include <QProcess>

int main(int argc, char *argv[]) {
        QCoreApplication a(argc, argv);

        QProcess p;
        p.start("/bin/sh");
        p.waitForStarted();

        p.write("echo hello world\n");
        QByteArray reply;
        while (p.waitForReadyRead(3000)) {
                reply += p.readAllStandardOutput();
                if (reply.endsWith('\n'))
                        break;
        }
        qDebug("Reply is '%*s'\n", reply.size(), reply.data());

        p.write("exit\n");
        p.waitForFinished();
        //return a.exec();
}
arsi ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.