当前位置: 代码迷 >> QT开发 >> qt 执行linux 命令的一个奇怪的有关问题
  详细解决方案

qt 执行linux 命令的一个奇怪的有关问题

热度:21   发布时间:2016-04-25 03:50:37.0
qt 执行linux 命令的一个奇怪的问题
第一次学习并且使用qt,遇到一个比较奇怪的问题,请各位给予一些指点:


需要使用qt直接执行一条linux命令 :ps aux|grep -v PID|

程序如下:

 cmd = new QProcess;
 cmd->start("ps aux|grep -v PID");
 cmd->waitForFinished(50000);
 QString result = cmd->readAll();

qDebug()<<result ;


希望将执行返回的结果放置到字符串result中。
但是问题是,好像这个命令不能被解析一样。返回的result 为空
但是如果使用 cmd->start("ps aux"); 则这个命令可以正常被解析

说明:ps aux|grep -v PID 在linux命令行中肯定是可以被执行的。


在线急等 找了很多资料也不知道是怎么回事 。。谢谢!

Qt Linux

------解决方案--------------------
试了一下,加了管道符就不好了..  "ps aux > tmp.out" 
这样也不好使... 等高手吧.. 
------解决方案--------------------

    QProcess p(this);
    QStringList arg;
    arg << "/c" << "dir" << "C:\\windows" << ">" << "c:\\dir.txt";
    p.start("cmd", arg);
    p.waitForFinished();

------解决方案--------------------
引用:
试了一下,加了管道符就不好了..  "ps aux > tmp.out" 
这样也不好使... 等高手吧.. 

问题出在几个基本概念你没搞清,管道符,重定向等都是你的shell进行解析处理的,它们不是你所调用程序的参数。

如果你想这样用,你应该去调用 sh/bash/dash 等程序。前面版主给出了windows下的例子,linux与之类似

或者,你直接去操作QProcess提供的标准输入、输出、出错 3个流,构建自己需要的管道和重定向