使用Qt从.cmd文件输出中读取Echo

时间:2016-05-06 13:41:20

标签: c++ qt

我正在尝试使用Qt从命令行运行.cmd文件。我需要能够启动.cmd文件然后我需要读取行输出以便能够解释它是否成功。

我正在测试的.cmd文件如下:

@ECHO OFF
ECHO myBat Started.
ECHO myBat Ended.

从命令行运行它会给我“myBat Started”。接着是“myBat Ended。”

下面是我试图从中读取数据输出的代码。

QString batName = "/path/to/*.cmd";
QProcess p;
qDebug() << "starting command";
p.start("cmd.exe", QStringList() << batName);
if (p.waitForStarted()){
   qDebug() << "cmd started";
   p.waitForFinished();
   qDebug() << p.readAllStandardOutput();
} else {
    qDebug() << "Failed to start";
}

当我运行它时,我得到“启动命令”,然后是“cmd started”,然后是“”。所以我正确打开控制台(我认为),它完成了,但后来我没有得到任何数据输出。

读取命令行输出需要更改什么?

1 个答案:

答案 0 :(得分:1)

添加/C切换到cmd命令,以便cmd.exe在执行批处理文件后终止。

即,这一行:

p.start("cmd.exe", QStringList() << batName);

应如下所示:

p.start("cmd.exe", QStringList() << "/C" << batName);

您甚至可以直接启动批处理文件,如下所示:

p.start(batName);

P.S。如果您的代码在GUI线程中执行,请不要使用waitFor*函数,而是使用信号/插槽。 。