2014-05-24 64 views
1

我有一個Windows應用程序,我想從控制檯/命令行運行一些ant腳本。我想要做的是點擊我的執行按鈕並打開一個控制檯/ shell窗口,然後在windows,unix,mac上運行命令並在完成時退出。這樣我可以看到所有的輸出。我一直在使用QProcess來做到這一點。但我真的想在每次運行腳本時打開一個控制檯窗口。他們是我可以用來做這個的API嗎?Qt Windows應用程序打開控制檯輸出

更新

這裏是我的代碼:

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); 

注:確保你有你的螞蟻,JAVA等設置在環境中設置。

+0

爲什麼你需要一個控制檯窗口而不僅僅是一個GUI元素,如QLabel或QTextEdit(只讀)? – lpapp

+0

基本上我想運行例如以下命令: ant -f build.xml -Dproject =東西做某事 然後讓它只輸出控制檯上的所有信息。我使用QProcess,但它似乎在長輸出它不顯示一切。 – adviner

+0

在某些情況下,QProcess似乎沒有捕獲所有輸出。有些情況下,在QProcess中運行時,在控制檯上工作的ant腳本似乎失敗。我不知道它是否因爲螞蟻腳本 – adviner

回答

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); 

確保你使用的家當等正常,否則,你可能需要明確指定解釋。

+0

嗯,我會試試看看會發生什麼。謝謝 – adviner

+0

shebang是什麼意思? – adviner

+0

@adviner:http://en.wikipedia.org/wiki/Shebang_%28Unix%29 – lpapp

相關問題