昨天在使用 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,读取的时候 有时候分两次 有时候分三次;
我是漏掉了什么呢?在网上没搜索到具体原因,希望朋友们帮忙看下哈。