Ste*_*ano 3 c++ linux qt qprocess
我需要强制我的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;
Run Code Online (Sandbox Code Playgroud)
这将打印:
Execute command -> ls -l | grep a | sort
"Std out -> "
"Std err -> ls: |: No such file or directory
Run Code Online (Sandbox Code Playgroud)
如果从consol中删除,将正确打印文件名.
如果我用更简单的方式替换command = "ls -l";comman , 那么它可以顺利工作.操作系统在标准错误中返回错误.
因此,我猜测用于命令的Qstring会以某种方式被操纵.关于wht发生的任何想法?
QProcess不支持shell命令.因此管道符号不是由shell解释,而是直接传递给ls. ls将其解释为文件名,并抱怨,因为显然没有命名的文件|.
您需要通过重定向QProcess对象的输入和输出流来手动设置管道.阅读文档以了解如何执行此操作.
一般应该如何避免shell命令,而是依赖于Qt类和函数.肯定没有必要打电话,grep或者ls因为同样的事情可以更轻松地完成QRegExp,并且QDir.如果需要执行子进程,则使用::start(const QString&, const QStringList&, OpenMode)重载并将所有参数作为列表传递以避免引用问题.
| 归档时间: |
|
| 查看次数: |
2625 次 |
| 最近记录: |