大多控制台程式都接受命令行引數,乙個例子:
#include int main(int argc, char **ar**)
編譯,呼叫程式時可指定命令列,結果:
$ ./process a b "c d"abc d
用qprocess呼叫外部程式時,可直接指定命令列引數
qprocess process;//
process.execute();//這個函式的 功能 是 呼叫 外部程式時 會阻塞,知道 外部程式結束
process.start("./process", qstringlist()<<"a"<<"b");process.start("./process a b");
後一種寫法看起來寫起來比較簡潔,但是程式路徑或引數中包括空格時,就不如第一種方便了。
對於控制台程式來說,這個可能是用的最多的了。比如上乙個程式,我們遍歷命令列引數,然後輸到標準輸出。
在控制台下,我們通常會使用重定向功能,比如:
$./process a b "c d" > out.txt
在qprocess下,我們使用
qprocess::readallstandardoutput()
獲取標準輸出
qprocess::setstandardoutputfile()
設定輸出到的檔案,相當於前面的重定向
qprocess process;process.start("./process", qstringlist()<<"a"<<"b");
process.readallstandardoutput();
可以使用:
將標準輸出作為另個程序的標準輸入。形成 ls -l | more 這樣的管道操作
由於qprocess是qiodevice的派生類,故:
都可以直接用獲取被呼叫程式的標準輸出。
相對於標準輸出,這個東西大家似乎用的比較少了。
#includeint main(int argc, char **ar**)
編譯執行(注意區分兩個流,標準出錯的檔案描述符是2):
$ ./processhello stdout!
hello stderr!
$ ./process > out.txt
hello stderr!
$ ./process > out.txt 2>err.txt
$
這個也不用多說,使用scanf()/gfets()等函式:
#includeint main(int argc, char **ar**)
執行:
$ ./process1+1=2
output: 1+1=2
如果要輸入的內容在檔案內,也可以使用重定向
$ ./process < intput.txtoutput: contents of input.txt
在qprocess中,直接使用qiodevice的write()函式
qprocess process;process.start("./process")
process.write("intput");
也可以設定檔案作為輸入
似乎很多人分不清返回值和標準輸出的概念。
int main()
也就是程式中 return x/exit(x) 等函式中指定的值了。
在windows下,通過
c:\> process.exec:\>echo %errorlevel%
在linux下,通過
$ ./process$ echo $?
獲得返回值。
在qprocess下,則通過:
獲得返回值。
Qt之程序間通訊(QProcess)
qprocess可以在應用程式內部與其它程序通訊,或啟動其它應用程式。與在終端機之類的命令輸入視窗上使用名稱和引數是一樣的,可以使用qprocess提供的函式start 啟動程序。可以註冊qstringlist處理程序後的引數。命令列讀取 更多參考 程序a 帶參啟動程序b 一般編寫程式時,嚴格來說,...
Qt之程序間通訊(QProcess)
qprocess可以在應用程式內部與其它程序通訊,或啟動其它應用程式。與在終端機之類的命令輸入視窗上使用名稱和引數是一樣的,可以使用qprocess提供的函式start 啟動程序。可以註冊qstringlist處理程序後的引數。命令列讀取 更多參考 程序a 帶參啟動程序b 一般編寫程式時,嚴格來說,...
Qt之程序間通訊(QProcess)
qprocess可以在應用程式內部與其它程序通訊,或啟動其它應用程式。與在終端機之類的命令輸入視窗上使用名稱和引數是一樣的,可以使用qprocess提供的函式start 啟動程序。可以註冊qstringlist處理程序後的引數。命令列讀取 更多參考 程序a 帶參啟動程序b 一般編寫程式時,嚴格來說,...