ifconfig | grep 'inet'
通过终端执行时正在工作。但不是通过QProcess
我的示例代码是
QProcess p1; p1.start("ifconfig | grep 'inet'"); p1.waitForFinished(); QString output(p1.readAllStandardOutput()); textEdit->setText(output);
在textedit上什么都没有显示。
但是当我仅ifconfig在qprocess的开头使用时,输出将显示在textedit上。我是否错过了构造命令的任何技巧ifconfig | grep 'inet',例如\'for '和\|for |?特殊字符?但我也尝试过
ifconfig
\'
'
\|
|
QProcess执行一个进程。您要执行的操作是执行 Shell命令 ,而不是进程。命令管道是Shell的功能。
有三种可能的解决方案:
将要执行的命令作为参数放入shafter -c(“ command”):
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();