• 5706阅读
  • 3回复

[提问]求助QProcess调用shell命令重定向问题 [复制链接]

上一主题 下一主题
离线smaller
 

只看楼主 倒序阅读 楼主  发表于: 2014-03-27
我是新手,刚学习Qt,利用QProcess调用shell命令通过管道命令输出到文本

    // du -s -m path 获取文件夹大小
    QString fromDir =QFileDialog::getExistingDirectory(this,"Open Directort", "home/root/seaso",QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
    ui->fom_lineEdit->setText(fromDir);


//    QString proc = "/bin/cp";
//    QStringList arguments;
//    arguments<<"-rf"<<ui->fom_lineEdit->text()<<ui->to_lineEdit->text();

//    QProcess pro_cp;
//    pro_cp.start(proc, arguments);
//    pro_cp.waitForFinished(30000);
    //获取文件夹大小;
    QString from_p = "/usr/bin/du";
    QString  fileName="/home/root/seaso/from.txt";
    qDebug()<<"from_p"<<from_p;
    QStringList from_arg;
    from_arg<<"-s"<<"-m"<<fromDir<<">"<<fileName;
    qDebug()<<"from"<<ui->fom_lineEdit->text();

    QProcess from_du;
    from_du.start(from_p, from_arg);
    from_du.waitForFinished(30000);
    qDebug()<<"from_p"<<from_p;
    qDebug()<<"from_arg"<<from_arg;

我希望利用du命令获取 文件夹大小 然后通过管道命令输出到文本,但是这个运行的时候没有输出文本文件。
另外 我用QProcess 调用 cp命令 复制文件没有问题,希望大神们解答以下。
离线dbzhang800

只看该作者 1楼 发表于: 2014-03-27
概念错了,重定向符号,管道符号等,不是你的程序的命令行参数。

如果要用他们,你需要启动的程序是你的shell,比如 bash 等,而后将要启动的程序作为参数传入。

另外,如果你不使用shell提供的重定向,你可以直接
QProcess的重定向支持:setStandardXXXXFile()
2条评分好评度+1金钱+1
smaller 好评度 +1 谢谢,解决问题咯 2014-03-28
smaller 金钱 +1 谢谢,解决问题咯 2014-03-28
离线smaller

只看该作者 2楼 发表于: 2014-03-27
回 dbzhang800 的帖子
dbzhang800:概念错了,重定向符号,管道符号等,不是你的程序的命令行参数。
如果要用他们,你需要启动的程序是你的shell,比如 bash 等,而后将要启动的程序作为参数传入。
另外,如果你不使用shell提供的重定向,你可以直接
....... (2014-03-27 16:52) 

我输入的是 du -s -m /home/root/a  >/home/root/a.txt
希望是得到a.txt中 记录du运行后的结果。
">" 是管道命令,我怎样将它传递出去呢?
我去看看QProcess的重定向支持的支持。
离线smaller

只看该作者 3楼 发表于: 2014-03-28
谢谢,解决问题咯
快速回复
限100 字节
 
上一个 下一个