2012-01-31 126 views
4

如何使用QProcess啓動Shell腳本? Shell腳本中有八個不同的命令,其中一些沒有其他參數。如何用QProcess啓動Shell腳本?

我試圖用(使用Ubuntu 11.10)啓動Shell腳本:

QProcess *Prozess = new QProcess(); 
Prozess->setWorkingDirectory(MainDirectory); 
Prozess->start("/bin/sh", QStringList() << "Shell.sh"); 

但是,這並不工作,這意味着沒有任何反應。如何使它工作?

+2

的代碼是罰款。它必須在後臺運行程序,而不顯示終端窗口。 – Hossein 2012-01-31 21:38:59

回答

4

代碼沒問題。問題是在運行時。

無論你的程序不能出於某種原因(測試是否可以運行gedit呢?),或者MainDirectory變量運行/bin/sh有錯誤的目錄路徑(調試的話),或者Shell.sh不會在該目錄中(資本錯誤?「./Shell.sh」?),或者你沒有足夠的特權來運行或修改目標目錄/文件(它們是否屬於你?)。

+0

嗨,好主意:)。 gedit的作品非常棒!問題是我需要「/ bin/sh」才能工作。 「./Shell.sh」沒有改變任何東西。因爲我沒有15的聲望,所以我不能投票。任何想法如何使「/ bin/sh」工作? – Streight 2012-02-01 13:43:38

1

您開始的過程在後臺運行。如果要查看正在運行的腳本的任何明確輸出,則必須連接到void readyReadStandardOutput()或/和void readyReadStandardError(),並明確從進程讀取。例如:

void onReadyRead() { 

    QByteArray processOutput = Prozess->readAllStandardOutput(); 
} 
+0

系統監視不顯示在後臺運行的任何進程,並且不創建腳本應創建的文件。所以「Prozess-> readAllStandardOutput();」也沒有幫助。 Shell腳本應該通過用「sh」執行來創建文件。 – Streight 2012-01-31 23:18:36

0

這應該工作:

QProcess::ProcessError Error = myProcess->readAllStandardError(); 
return Error;