• 7086阅读
  • 4回复

[提问]qprocess调用bash无法获得输出 [复制链接]

上一主题 下一主题
离线suck007
 

只看楼主 倒序阅读 楼主  发表于: 2012-03-15

无论用testA方法还是testB方法,都不能获得最后的输出回显,求助

void MainWindow::testA()
{
    //qt的最下面的"应用程序输出"能看到log,最下面的cout也拿不到
    QProcess* proc = new QProcess();

    QStringList arg;

    proc->execute("mediastreamvalidator",arg);

    proc->waitForStarted(-1);
    proc->waitForFinished(-1);

    //这里拿不到
    cout << "标准输出" << proc->readAllStandardOutput().size() << endl;
    cout << "错误输出" << proc->readAllStandardError().size() << endl;
}

void MainWindow::testB()
{
    //qt的最下面的"应用程序输出"看不到log,最下面的cout也拿不到
    QProcess* proc = new QProcess();

    QStringList arg;

    arg << "-c";
    arg << "/usr/bin/mediastreamvalidator";

    proc->execute("/bin/bash/",arg);

    proc->waitForStarted(-1);
    proc->waitForFinished(-1);

    //这里拿不到
    cout << "标准输出" << proc->readAllStandardOutput().size() << endl;
    cout << "错误输出" << proc->readAllStandardError().size() << endl;
}


标准输出0
错误输出0
标准输出0
错误输出0
离线uidab

只看该作者 1楼 发表于: 2012-03-16
可能不是Standardoutput  而是 Erroroutput
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线jdwx

只看该作者 2楼 发表于: 2012-03-16
要读取QProcess的输出,需要响应下面的信号,有信号发射了才有信息输出。
void    readyReadStandardError ()
void    readyReadStandardOutput ()
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线suck007

只看该作者 3楼 发表于: 2012-03-16
引用第2楼jdwx于2012-03-16 09:04发表的  :
要读取QProcess的输出,需要响应下面的信号,有信号发射了才有信息输出。
void    readyReadStandardError ()
void    readyReadStandardOutput ()



按照您说的,现在这样修改

void MainWindow::testA()
{
    //qt的最下面的"应用程序输出"能看到log,最下面的cout也拿不到
    //QProcess* proc = new QProcess();
    proc = new QProcess();
    QStringList arg;

    connect(proc,SIGNAL(readyReadStandardOutput()),this,SLOT(readStandardOutput()));    connect(proc,SIGNAL(readyReadStandardError()),this,SLOT(readErrorOutput()));

    proc->execute("mediastreamvalidator",arg);

    proc->waitForStarted(-1);
    proc->waitForFinished(-1);

    //这里拿不到
//    cout << "标准输出" << proc->readAllStandardOutput().size() << endl;
//    cout << "错误输出" << proc->readAllStandardError().size() << endl;
}

void MainWindow::testB()
{
    //qt的最下面的"应用程序输出"看不到log,最下面的cout也拿不到
    //QProcess* proc = new QProcess();
    proc = new QProcess();
    QStringList arg;

    arg << "-c";
    arg << "/usr/bin/mediastreamvalidator";

    connect(proc,SIGNAL(readyReadStandardOutput()),this,SLOT(readStandardOutput()));    connect(proc,SIGNAL(readyReadStandardError()),this,SLOT(readErrorOutput()));

    proc->execute("/bin/bash/",arg);

    proc->waitForStarted(-1);
    proc->waitForFinished(-1);

    //这里拿不到
//    cout << "标准输出" << proc->readAllStandardOutput().size() << endl;
//    cout << "错误输出" << proc->readAllStandardError().size() << endl;
}

void MainWindow::readStandardOutput()
{
    cout << "readStandardOutput 标准输出" << proc->readAllStandardOutput().size() << endl;
    cout << "readStandardOutput 错误输出" << proc->readAllStandardError().size() << endl;
}

void MainWindow::readErrorOutput()
{
    cout << "readErrorOutput 标准输出" << proc->readAllStandardOutput().size() << endl;
    cout << "readErrorOutput 错误输出" << proc->readAllStandardError().size() << endl;
}

这里最后的两个红色的方法没有得到调用,设置error的put也是没有输出,按照这个结果来猜测,貌似是readyReadStandardOutput信号和readyReadStandardError信号没有发射,不知道还有没有什么解决的办法?
离线suck007

只看该作者 4楼 发表于: 2012-03-16
问题解决了,是在error的output里面,谢谢两位
贴上能用的代码

    proc = new QProcess();
    QStringList arg;

    proc->start("mediastreamvalidator",arg);

    proc->waitForStarted(-1);
    proc->waitForFinished(-1);


    QString xx(proc->readAllStandardError().data());

    qDebug() << "readAllStandardOutput" << QString::fromLocal8Bit(proc->readAllStandardOutput().data());
    qDebug() << "readAllStandardError" << QString::fromLocal8Bit(proc->readAllStandardError().data());

    QMessageBox::information(NULL, "标题", xx, QMessageBox::Yes);

//    qDebug() << QString::fromLocal8Bit(proc->readAllStandardError());
//    qDebug() << QString::fromLocal8Bit(proc->readAllStandardOutput());
快速回复
限100 字节
 
上一个 下一个