Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QProcess + STDIN/STDOUT
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие
Majestio
Вопрос №1: нужно запустить процесс, предварительно записав ему в STDIN некоторые данные, получить из его STDOUT результат, ну и использовать их в своей программе. Накидал частично работающий код, дальше тупичек. Нужна ваша помощь.

Слот из программы, пока просто вызывается кликом педали на форме:
void MainWindow::SlotRun()
{
    QProcess *P = new QProcess();
    // как записать процессу в его STDIN пару текстовых строк???
    P->setReadChannelMode(QProcess::MergedChannels);
    P->start(tr("cmd.exe"),QStringList() << tr("/c") << QCoreApplication::applicationDirPath()+"/StartHidden.cmd" << tr("Argument"));
    P->waitForFinished();
    QTextCodec *Cp866 = QTextCodec::codecForName("IBM 866");
    qDebug() << Cp866->toUnicode(P->readAllStandardOutput());
}


Данный код вызывает, как пример, StartHidden.cmd:
@echo off
sort
ping 192.168.1.2
echo Result: %1


Естественно, если я sort не закомментирую - вызов зависает. А мне нужно чтобы sort отсортировал переданные ему строки.

Вопрос №2:
QTextCodec *Cp866 = QTextCodec::codecForName("IBM 866");

Программа работает в UTF-8, а как узнать в какой кодировке работает консольное приложение?
Majestio
На соседнем форуме подкинули путь решения.
Вот работающий код:

void MainWindow::SlotRun()
{
    qDebug() << "Start";
    QProcess *P = new QProcess();
    P->setReadChannelMode(QProcess::MergedChannels);
    P->start(tr("cmd.exe"),QStringList() << tr("/c") << QCoreApplication::applicationDirPath()+"/StartHidden.cmd" << tr("Argument"));
    QString strings("String4\nString2\nString3\nString1");
    P->write(strings.toLocal8Bit());
    P->closeWriteChannel();
    P->waitForFinished();
    QTextCodec *Cp866 = QTextCodec::codecForName("IBM 866");
    qDebug() << Cp866->toUnicode(P->readAllStandardOutput());
    qDebug() << "Stop";
}

Все сортируется, все выводится.
Вопрос закрыт :)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.