在Qt中实时获取cmd命令的输出

Posted

技术标签:

【中文标题】在Qt中实时获取cmd命令的输出【英文标题】:Get output of cmd command in real time in Qt 【发布时间】:2020-09-16 17:25:30 【问题描述】:

我在 Qt 中使用此代码来获取 cmd 推荐的输出

     QProcess c_output;
     c_output.start("some-exe", QStringList() << "param1" << "param2" << "param3...");
     if (!c_output.waitForStarted())
         std::cout << false;

     c_output.write("...");
     c_output.closeWriteChannel();

     if (!c_output.waitForFinished())
         std::cout << false;

它的工作很好。 使用此代码,我可以使用c_output.readAll() 访问输出,但问题是此代码等到 cmd 完成 exec ...然后在c_output.readAll() 中提供所有输出,我想实时获取输出并在我的程序的 gui 中显示它们 我的意思是我在 exec 之后推荐打印多行,我想在我的程序中一一显示它们而不是等待它完成。

【问题讨论】:

喜欢在另一个线程中? @ΦXocę웃Пepeúpaツ 你说的是什么话题? 【参考方案1】:

您可以使用 waitForReadyRead 代替 waitForFinished ,请参阅 https://doc.qt.io/qt-5/qprocess.html#waitForReadyRead

这是一个简单的用法示例:

#include <QCoreApplication>
#include <QFile>
#include <QTextStream>
#include <QProcess>
#include <QDebug>

int main(int argc, char *argv[])


    QCoreApplication app(argc, argv);
    QProcess c_output;
    c_output.setProcessChannelMode(QProcess::MergedChannels);
     c_output.start("dmesg", QStringList() << "-w");
     if (!c_output.waitForStarted())
         qDebug() << "Failed to start";
        return -1;
     

     c_output.write("...");
     c_output.closeWriteChannel();

     while (c_output.state() != QProcess::NotRunning)
     
        qDebug() << ".";
        if (c_output.waitForReadyRead())
         qDebug() << "c_output" << c_output.readAllStandardOutput();
     


    return app.exec();

【讨论】:

之后如何使用 c_output.readAll() 读取输出? 谢谢你的好例子,你能举个例子在gui中显示吗?我的意思是在现有文本中追加输出 我认为这超出了这个问题的范围。例如,请参阅此 SO 答案:***.com/questions/13559990/… 或用您的确切问题陈述一个单独的问题。 我在你的代码中发现的一个问题是它显示 \r\n 并且它也是一些时间合并行 这也取决于可执行文件的输出格式,所以我不能用具体的例子来指导你,但你可以尝试使用canReadLine() readLine()方法的组合以及获得分隔线。

以上是关于在Qt中实时获取cmd命令的输出的主要内容,如果未能解决你的问题,请参考以下文章

bat 打开cmd 执行Python文件

windows下C与C++执行cmd命令并实时获取输出

使用 Python 运行 CMD 命令,打印输出并将输出作为变量获取

qt如何向cmd写入命令啊?求大牛指导!!!跪谢。。。

java执行cmd命令并获取输出结果

python执行cmd命令