Я работаю в Qt 4.7, и у меня есть программа, которая должна использовать QProcess для вывода результата выполнения команды Windows PowerShell. Для целей этого вопроса, допустим, все, что необходимо поддержать, - это использование опции «-Command». Прямо сейчас у меня есть это:

QString path = "C:/windows/system32/WindowsPowerShell/v1.0/powershell.exe"; QStringList command; command.append("-Command"); command.append(/*Whatever test command I want to use...*/); process = new QProcess(); //Note: QProcess *process is a member of this class connect(process, SIGNAL(error(QProcess::ProcessError)), this, SLOT(/*slot to print qprocess errors...*/); connect(process, SIGNAL(readyReadStandardOutput()), this, SLOT(/*slot to display PowerShell output...*/); process->start(path, command);

Слот для печати вывода PowerShell выглядит следующим образом:

std::cout << "RESULT: " << QString(process->readAllStandardOutput()).toStdString() << std::endl;

Это отлично работает с правильными командами PowerShell. Например, я протестировал его с помощью команды «Get-ChildItem C: \», и ​​он распечатал правильные данные. Он также отлично работает, если есть ошибка QProcess. Что мне нужно знать, как сделать так, чтобы он выводил сообщение об ошибке PowerShell ? Например, если я пытаюсь использовать команду Get-ChildIte (без m в конце) непосредственно в PowerShell, я получаю сообщение об ошибке. Но с моим кодом он просто ничего не печатает. Он мне нужен, чтобы распечатать это сообщение об ошибке. Если кто-нибудь знает, как это можно сделать, я буду очень признателен. Спасибо!

-1
thnkwthprtls 16 Апр 2014 в 23:31

2 ответа

Лучший ответ

Итак, примерно через минуту после того, как я опубликовал это, я обнаружил сигнал QProcess readyReadStandardError(), который работает идентично readyReadStandardOutput, за исключением того, что он выдается, когда какой-либо запущенный QProcess имеет ошибку. Я подключил это к слоту, аналогичному тому, что у меня выше, но вместо этого напечатал QString(process->readAllStandardError()).toStdString(), и это сработало.

0
thnkwthprtls 16 Апр 2014 в 19:45

Хорошо, вы разместили свой ответ 7 секунд назад. Я просто хотел подтвердить и дать вам ссылку, которая может помочь устранить эту проблему в будущем.

Класс QProcess

Да, вам нужна функция readAllStandardError () QProcess.

1
TheMadTechnician 16 Апр 2014 в 19:47