我有一个Windows应用程序,我想从控制台/命令行运行一些ant脚本。我想要做的是点击我的执行按钮并打开一个控制台/ shell窗口并在windows,unix,mac上运行命令并在完成后退出。这样我就可以看到所有输出。我一直在使用QProcess来做它并且它有效。但我真的想每次运行脚本时打开一个控制台窗口。他们可以用它来做这个API吗?
更新
这是我的代码:
QString argument = QString("ant -f %1 %2 %3\n\r").arg(QDir::cleanPath(file), parameter, target);
QProcess scriptProcess;
scriptProcess.setProcessChannelMode(QProcess::MergedChannels);
if (Commons::GetCurrentOSID() == 1) // Windows
scriptProcess.start(QString("cmd"));
else if (Commons::GetCurrentOSID() == 2) // Mac
scriptProcess.start(QString("bash"));
else if (Commons::GetCurrentOSID() == 3)
scriptProcess.start(QString("bash")); // Windows
if (!scriptProcess.waitForStarted())
{
message.append("Ant command failed to execute");
}
else
{
scriptProcess.write(argument.toStdString().c_str());
scriptProcess.write("exit\n\r");
result = scriptProcess.waitForFinished();
if (result == false)
{
message.append("Ant command failed to complete");
}
else
result = true;
}
scriptProcess.closeWriteChannel();
QByteArray output = scriptProcess.readAll();
text->setPlainText(output);
注意: 确保您在环境中设置了ant,java等设置。
答案 0 :(得分:0)
这是我个人使用的代码:
QProcess scriptProcess;
scriptProcess.setProcessChannelMode(QProcess::MergedChannels);
scriptProcess.start("ant", QStringList{"-f", "build.xml", "-Dproject=something"});
if (!scriptProcess.waitForStarted())
return false;
if (!scriptProcess.waitForFinished())
return false;
QByteArray output = scriptProcess.readAll();
myLabel.setText(output);
确保正确使用shebang等,否则,您可能需要明确指定解释器。