在qt中创建一个进程qprocess用start去执行终端命令,查询home目录下内容,并且将它的标准输出放到字节数组str1,然后在application out窗口打印出来,但现在问题是str1通过qprocess的readallStandurdOutput没法获得标准输出的内容,如何解决?
操作环境:Ubuntu16.04
软件版本:qt5.5.1
用qprocess的execute执行终端命令,可以查询到home目录下的结果并在application output显示出来,但依然没法打印。
并且会出现QIODevice::read (QProcess): device not open
可以把标准输出打印出来
以下是代码
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QProcess>
#include <QThread>
#include <QDebug>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private slots:
void on_pushButton_clicked();
private:
Ui::Widget *ui;
QProcess *myprocess;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
myprocess = new QProcess(this);//创建一个进程
myprocess->execute("ls /home");//用进程执行终端命令查看home目录下所有文件
QByteArray str1 = myprocess->readAllStandardOutput();//读取这些文件放到字节数组str1中
if(str1.isEmpty()){
qDebug()<<"emptu"<<endl;
}
QString str(str1);
qDebug()<<"ss"<<str<<endl;
}
main.cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
QProcess少了一个设置模式
process.setProcessChannelMode(QProcess::SeparateChannels);
QProcess::execute()是个静态函数,执行execute对QProcess对象本身没有任何操作,当然是无法读取的