首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在QProcess中逐个读取多次写入的输出

在QProcess中逐个读取多次写入的输出
EN

Stack Overflow用户
提问于 2014-03-28 14:01:07
回答 1查看 516关注 0票数 1

有没有人可以帮我读qprocess的输出,在写和循环之后,直到所有的任务都完成?我有这个代码

代码语言:javascript
复制
  wifi->write("scan\n");  
  wifi->closeWriteChannel();
  wifi->waitForBytesWritten(100);
  wifi->waitForReadyRead(100);
  wifi->waitForFinished(100);
  qDebug() << "read output" << wifi->readAllStandardOutput();
  wifi->write("scan\n");  
  wifi->closeWriteChannel();
  wifi->waitForBytesWritten(100);
  wifi->waitForReadyRead(100);
  wifi->waitForFinished(100);
  qDebug() << "read output" << wifi->readAllStandardOutput();

预期输出必须为

"OK“

“扫描结果”

但是输出结果是

"OK“

"“

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2014-03-28 14:17:29

你的多次等待没有任何用处。您所关心的是进程何时结束,因此使用一个超时更长的waitForFinished调用(这些扫描不会在大约100ms内发生,几秒钟是一个好的最小值)。

您不应该使用阻塞waitForXxx方法。他们把每个人都绊倒了,是无休止的悲伤的源泉。忘记它们的存在。使用进程的信号在事件发生时对其做出反应。

Qt 5+ C++11

这就是前进的方向。这就是为什么您应该坚持使用现代开发环境,如果可以的话。它打字更少,更容易理解。

代码语言:javascript
复制
void MyObject::startWifi() {
  auto process = new QProcess(this);
  process->start("program", QStringList() << "argument");
  connect(process, &QProcess::started, [process]{
    process->write("scan\n");
    process->closeWriteChannel();
  });
  connect(process, &QProcess::finished, [process]{
    qDebug() << process->readAllStandardOutput();
    process->deleteLater();
  });
}

Qt 4

代码语言:javascript
复制
class MyObject : public QObject {
  Q_OBJECT
  QProcess m_wifi;
  Q_SLOT void onStarted() {
    m_wifi.write("scan\n");
    m_wifi.closeWriteChannel();
  }
  Q_SLOT void onFinished() {
    qDebug() << m_wifi.readAllStandardOutput();
  }
public:
  MyObject(QObject * parent = 0) : QObject(parent) {
    connect(&m_wifi, SIGNAL(started()), SLOT(onStarted()));
    connect(&m_wifi, SIGNAL(finished(int,QProcess::ExitStatus)),
                     SLOT(onFinished()));
  }
  Q_SLOT void start() {
    m_wifi.start("program", QStringList() << "argument");
  }
};

然后在该对象的一个实例上调用start方法/插槽。就这样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22705335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档