簡體   English   中英

qt通過qprocess運行shell命令

[英]qt run shell commands via qprocess

我正在開發一個小型QT應用程序,以便與終端進行交互,向終端發送命令並讀取打印出的信息。

示例:使用ps -aux獲取所有進程的輸出

問題

我能夠將信息寫出到終端,但是我不認為這是在系統范圍內的,例如:

傳遞給shell解釋器的命令"echo "pre"; ps -aux; echo "post"

從評論編輯:

我需要發送特定的完整命令,我不希望找到縮短的命令或替代命令,我需要一種發送命令的方法,例如: ps -aux | grep chrome | tr -s " " | cut -d " " -f 2 ps -aux | grep chrome | tr -s " " | cut -d " " -f 2 ps -aux | grep chrome | tr -s " " | cut -d " " -f 2並讀取其輸出。 此示例獲取所有正在運行的chrome進程的所有pid

口譯員嘗試

  • sh
  • /bin/bash

碼:

QProcess *proc_ovpn = new QProcess(this);
proc_ovpn->waitForFinished();
proc_ovpn->start("sh",QStringList() << "-c" << "echo \"pre\";ps -aux; echo \"post\"");
proc_ovpn->setProcessChannelMode(QProcess::MergedChannels);
QString str(proc_ovpn->readAllStandardOutput());
return str;                             <<< ======= //breakpoint here

調試信息:

當達到斷點時,調試信息如下:

Locals      
    str ""  QString
    this    @0x555555ad7be0 Interface
Inspector       
Expressions     
Return Value        
Tooltip     
    10000000    10000000    int

有人建議在SO上的帖子中使用此方法來運行Shell代碼,但無法再次找到它。

我很茫然,我不明白為什么運行這些命令不直接與系統(及其信息)進行交互,

有什么建議嗎?

您需要在start之后而不是之前使用waitForFinished()

proc_ovpn->start("sh",QStringList() << "-c" << "echo \"pre\";ps -aux; echo \"post\"");
proc_ovpn->waitForFinished();

請注意, waitForFinished()阻塞,直到進程(已由start調用)完成為止。

另外,您可以檢查該過程是否成功啟動和/或waitForFinished超時

proc_ovpn->start("sh",QStringList() << "-c" << "echo \"pre\";ps -aux; echo \"post\"");

if(!proc_ovpn->waitForStarted()) //default wait time 30 sec
    qWarning() << " cannot start process ";

int waitTime = 60000 ; //60 sec
if (!proc_ovpn->waitForFinished(waitTime))
         qWarning() << "timeout .. ";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM