c – Qprocess混淆了我的linux命令(我认为).怎么修?
作者:互联网
参见英文答案 > Command working in terminal, but not via QProcess 3个
我需要强制我的c QT4应用程序从linux命令读取结果.我正在尝试使用Qprocess,但是一旦我的命令变得复杂,它就会以某种方式混乱(只是猜测)并且不起作用.
在这里,我尝试为yu做一个小例子:
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这样的命令=“ls -l”;它工作顺畅
操作系统在标准错误时返回错误.
因此,我猜测用于命令的Qstring会以某种方式被操纵.关于wht发生的任何想法?
解决方法:
QProcess不支持shell命令.因此管道符号不是由shell解释,而是直接传递给ls. ls将其解释为文件名,并抱怨,因为显然没有名为|的文件.
您需要通过重定向QProcess对象的输入和输出流来手动设置管道.阅读文档以了解如何执行此操作.
一般应该如何避免shell命令,而是依赖于Qt类和函数.当然不需要调用grep或ls,因为使用QRegExp和QDir可以更轻松地完成相同操作.如果需要执行子进程,则使用:: start(const QString&,const QStringList&,OpenMode)重载并将所有参数作为列表传递以避免引用问题.
标签:qprocess,c,linux,qt 来源: https://codeday.me/bug/20190723/1514949.html