我有一个Windows应用程序,我想从控制台/命令行运行一些ant脚本。我想做的是单击我的执行按钮,打开一个控制台/外壳窗口,然后在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等设置。
这是我个人使用的代码:
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等,否则,可能需要显式指定解释器。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句