我需要强制我的C++ QT4应用程序从linux命令读取结果。我正在尝试使用Qprocess,但一旦我的命令变得复杂,它就会以某种方式被弄乱(只是猜测)并且不起作用。Qprocess混淆我的Linux命令(我认为)。怎么修?
在这里,我试图做出宇一个小例子:
QProcess process;
command = "ls -l | grep a | sort";
qDebug() << "Execute command -> "+command;
process.start(command);
process.waitForFinished(-1);
QString processStdout = process.readAllStandardOutput();
QString processStderr = process.readAllStandardError();
qDebug() << "Std out -> "+processStdout;
qDebug() << "Std err -> "+processStderr;
会打印:
Execute command -> ls -l | grep a | sort
"Std out -> "
"Std err -> ls: |: No such file or directory
,同时将正确打印的文件名,如果从CONSOL符文。
如果我用一些简单的东西替换comman,例如command = "ls -l";
,它将无法正常工作 该错误是由操作系统在标准错误上返回的。
因此,我猜测用于该命令的Qstring会以某种方式被操纵。有关这种事情发生的任何想法?
我不认为它只是|。如果我使用命令egrep -l'aaa'/ user/*/mydir/*说egrep:/ user/*/mydir/*没有这样的文件或目录。 和在这个命令我没有| – Stefano
同样的问题。 *通配符也由shell解释。在shell上发生的事情是,通配符被替换,并且命令被所有匹配的文件调用。如果使用QProcess,则不会执行这样的替换,并且grep被称为egrep“/ user/*/mydir/*”(注意“,即该模式作为参数给予egrep)。你也会遇到同样的问题。 – LiKao
现在我明白了。非常感谢! – Stefano