我正在尝试使用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”,然后是“”。所以我正确打开控制台(我认为),它完成了,但后来我没有得到任何数据输出。
读取命令行输出需要更改什么?
答案 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*
函数,而是使用信号/插槽。 。