Ответ 1
QProcess выполняет один процесс. То, что вы пытаетесь сделать, - это выполнить команду оболочки, а не процесс. Конвейер команд - это особенность вашей оболочки.
Существует три возможных решения:
Поместите команду, которую вы хотите исполнить, в качестве аргумента sh
после -c
( "команда" ):
QProcess sh;
sh.start("sh", QStringList() << "-c" << "ifconfig | grep inet");
sh.waitForFinished();
QByteArray output = sh.readAll();
sh.close();
Или вы можете записать команды в качестве стандартного ввода в sh
:
QProcess sh;
sh.start("sh");
sh.write("ifconfig | grep inet");
sh.closeWriteChannel();
sh.waitForFinished();
QByteArray output = sh.readAll();
sh.close();
Другим подходом, который позволяет избежать sh
, является запуск двух QProcesses и выполнение кода в вашем коде:
QProcess ifconfig;
QProcess grep;
ifconfig.setStandardOutputProcess(&grep); // "simulates" ifconfig | grep
ifconfig.start("ifconfig");
grep.start("grep", QStringList() << "inet"); // pass arguments using QStringList
grep.waitForFinished(); // grep finishes after ifconfig does
QByteArray output = grep.readAll(); // now the output is found in the 2nd process
ifconfig.close();
grep.close();