Command working in terminal, but not via QProcess
QProcess executes one single process. What you are trying to do is executing a shell command, not a process. The piping of commands is a feature of your shell.
There are three possible solutions:
Put the command you want to be executed as an argument to sh
after -c
("command"):
QProcess sh;sh.start("sh", QStringList() << "-c" << "ifconfig | grep inet");sh.waitForFinished();QByteArray output = sh.readAll();sh.close();
Or you could write the commands as the standard input to sh
:
QProcess sh;sh.start("sh");sh.write("ifconfig | grep inet");sh.closeWriteChannel();sh.waitForFinished();QByteArray output = sh.readAll();sh.close();
Another approach which avoids sh
, is to launch two QProcesses and do the piping in your code:
QProcess ifconfig;QProcess grep;ifconfig.setStandardOutputProcess(&grep); // "simulates" ifconfig | grepifconfig.start("ifconfig");grep.start("grep", QStringList() << "inet"); // pass arguments using QStringListgrep.waitForFinished(); // grep finishes after ifconfig doesQByteArray output = grep.readAll(); // now the output is found in the 2nd processifconfig.close();grep.close();