• 4241阅读
  • 1回复

[提问]请教一下关于QProcess读取标准输出的问题 [复制链接]

上一主题 下一主题
离线smaller
 

只看楼主 倒序阅读 楼主  发表于: 2015-06-26
昨天在使用 QProcess调用外部程序,用process获取外部程序的输出信息,发现获取到的信息不完整具体情况如下:
Qt 代码:
void MainWindow::on_start_pushButton_clicked()
{
    QProcess *process= new QProcess(this);

    QObject::connect(process,SIGNAL(readyRead()),this,SLOT(dis_read()));
   QStringList list;
    list<<"&";
    process->start("/home/small/hello/hell");
}
void MainWindow::dis_read()
{

    QProcess *process= (QProcess *)sender();

  //  cin = process->readAll();
    cin=process->readAllStandardOutput();

//    QString cin =QByteArray(process->readAll()).data();
     qDebug()<<cin;
    ui->textEdit->setText(cin);
   // cin="";
}

void MainWindow::on_exit_pushButton_clicked()
{

    QProcess *qProcess = new QProcess;
    QString kill="killall";
    QStringList str;
    str<<"hell";

    qProcess->start(kill,str);
    qProcess->waitForFinished(30000);

}

测试程序代码:
#include <stdio.h>
#include <string.h>
#include <unistd.h>

/*
unsigned int sleep(unsigned int seconds);
*/
void main()
{
    setvbuf(stdout, (char *)NULL, _IONBF, 0);
    //setvbuf(stdout,(char *)NULL,_IOLBF,0);
    int i=1;
    int  m=0;
    while(i)
    {
        int num;
        for(num=0;num<1000;num++){
            usleep(1000);            
        }
    
    m++;
    if(i==1)
    {
        i++;
        printf("m=%d\n",m);
        printf("Hello world!1\n");
        printf("Hello world!2\n");
        printf("Hello world!3\n");
        printf("Hello world!4\n");
        printf("Hello world!5\n");
        printf("Hello world!6\n");
        printf("Hello world!7\n");
        printf("Hello world!8\n");

    }else if(i==2)
    {
        i--;
        printf("m=%d\n",m);
        
        printf("Hello world!9\n");
        printf("Hello world!10\n");
        printf("Hello world!11\n");
        printf("Hello world!12\n");
        printf("Hello world!13\n");
        printf("Hello world!14\n");
        printf("Hello world!15\n");
        printf("Hello world!16\n");
        printf("Hello world!17\n");
        printf("Hello world!18\n");
        printf("Hello world!19\n");
        printf("Hello world!20\n");
        printf("Hello world!21\n");
        
    }
    if(m==65534){
    i=0;    
    }    
    }
}

运行结果:

Hello world!3
Hello world!4
Hello world!5
Hello world!6
Hello world!7
Hello world!8


Hello world!11
Hello world!12
Hello world!13
Hello world!14
Hello world!15
Hello world!16
Hello world!17
Hello world!18
Hello world!19
Hello world!20
Hello world!21
qDebug输出结果:
"m=1
"
"Hello world!1"
"
"
"Hello world!2"
"
Hello world!3
Hello world!4
Hello world!5
Hello world!6
Hello world!7
Hello world!8
"
"m=4
"
"Hello world!9"
"
"
"Hello world!10"
"
Hello world!11
Hello world!12
Hello world!13
Hello world!14
Hello world!15
Hello world!16
Hello world!17
Hello world!18
Hello world!19
Hello world!20
Hello world!21
"

具体现象就是上面的,一组printf,读取的时候 有时候分两次 有时候分三次;
我是漏掉了什么呢?在网上没搜索到具体原因,希望朋友们帮忙看下哈。
离线dbzhang800

只看该作者 1楼 发表于: 2015-06-26
个人觉得这是正常现象,即使分10次8次收到也是正常的
快速回复
限100 字节
 
上一个 下一个