Qt之QProcess 和 c語言對比

2021-09-29 19:43:05 字數 2212 閱讀 8081

大多控制台程式都接受命令行引數,乙個例子:

#include int main(int argc, char **ar**)

編譯,呼叫程式時可指定命令列,結果:

$ ./process a b "c d"ab

c 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的派生類,故:

都可以直接用獲取被呼叫程式的標準輸出。

相對於標準輸出,這個東西大家似乎用的比較少了。

#include 

int main(int argc, char **ar**)

編譯執行(注意區分兩個流,標準出錯的檔案描述符是2):

$ ./process

hello stdout!

hello stderr!

$ ./process > out.txt

hello stderr!

$ ./process > out.txt 2>err.txt

$

這個也不用多說,使用scanf()/gfets()等函式:

#include 

int main(int argc, char **ar**)

執行:

$ ./process 

1+1=2

output: 1+1=2

如果要輸入的內容在檔案內,也可以使用重定向

$ ./process < intput.txt

output: contents of input.txt

在qprocess中,直接使用qiodevice的write()函式

qprocess process;

process.start("./process")

process.write("intput");

也可以設定檔案作為輸入

似乎很多人分不清返回值和標準輸出的概念。

int main()

也就是程式中 return x/exit(x) 等函式中指定的值了。

在windows下,通過

c:\> process.exe

c:\>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 一般編寫程式時,嚴格來說,...