需求

使用 QProcess 调用 ping, 并输出结果到文件,或者实时输出显示。

解决

调用进程

std::shared_ptr<QProcess> process_ = nullptr;
process_ = std::make_shared<QProcess>(this);
process_->start("ping www.baidu.com");
if (process_ != nullptr) {
    //process_->close();
    process_->kill();
    process_->waitForFinished();
    process_ = nullptr;
}
  • close() 可以直接关闭子进程
  • kill() 用于向子进程发送 SIGKILL, 然后通过 waitForFinished() 来等待子进程退出。

输出到文件

start() 之前:

process_->setStandardOutputFile("out.txt");

实时输出显示

start() 之前:

process_->setReadChannel(QProcess::StandardOutput);
connect(process_.get(), &QProcess::readyRead, [=](){
    qDebug() << process_->readAllStandardOutput();
});

记得使用 closeReadChannel() 来关闭读取通道。

参考

QT QProcess 重定向问题

QProcess开启外部程序,实时获取该程序的标准输出

QProcess快速实现外部程序调用

Qt开发之路34—QProcess重定向子进程的日志输出

QT: 使用QProcess启动进程并实时获取标准输出

Qt 之启动外部程序