Получить вывод Qprocess в переменной?

Этот вопрос похож на этот вопрос. Разница в том, что указанное там решение работает не всегда.

Пример 1

QProcess * process;
process = new QProcess();
process->start("/usr/bin/env");
process->waitForFinished(-1);

QString p_stdout = process->readAllStandardOutput();
qDebug() << p_stdout;

//output
HOME=/home
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/sbin:/usr/sbin
DISPLAY=:0.0
SHELL=/bin/sh
PWD=/home

Все работает, и вывод похож на ввод /usr/sbin/env в терминале.

Пример 2

QProcess * process;
process = new QProcess();
process->start("/usr/sbin/iptables");
process->waitForFinished(-1);

QString p_stdout = process->readAllStandardOutput();
qDebug() << p_stdout;

//output
""

Тот же код, просто другая команда и никакого вывода. Есть вывод, когда я набираю /usr/sbin/iptables в терминале

iptables v1.4.16.3: команда не указана Попробуйте `iptables -h' или 'iptables --help' для получения дополнительной информации.

немного он не появляется в p_stdout. В чем подвох этого решения?


person TheMeaningfulEngineer    schedule 07.02.2014    source источник
comment
Вы пытались подключиться к сигналу ошибки в QProcess и прочитать стандартную ошибку?   -  person TheDarkKnight    schedule 07.02.2014
comment
Вы тоже пробовали QProcess::readAllStandardError()?   -  person vahancho    schedule 07.02.2014
comment
@vahancho Да, это была проблема. Я решил это с помощью process->setProcessChannelMode(QProcess::MergedChannels);   -  person TheMeaningfulEngineer    schedule 07.02.2014
comment
Алан, вполне нормально ответить на твой вопрос. Напишите свое решение в качестве ответа и удалите комментарий. Затем вы также должны пометить мой комментарий и все остальные комментарии как устаревшие (так как они будут, тогда!).   -  person Kuba hasn't forgotten Monica    schedule 07.02.2014