2012-08-15 160 views
1

我並不擅長Qt,在Ubuntu上沒有太多知識,但是這裏是我所做的: 我啓動gnome-terminal,然後從它啓動我的* .sh文件。如何從Qt做到這一點? 我做:QProcess終端輸入

QProcess *proc = new QProcess; 
proc->start("gnome-terminal"); 
proc->write("build.sh\n"); 

但就終端開什麼也沒有發生,我可以mannualy輸入命令,但我需要從QProcess中做到這一點。

+0

參見[這](http://stackoverflow.com/questions/9086771/how-to-start-a-shell- script-with-qprocess)問題 – dvvrd 2012-08-15 08:01:12

+0

兩件事情:1)當start()返回時,gnome-terminal尚未啓動。你必須連接到proc的start()信號或者調用waitForStarted()。 2)寫入()寫入終端的stdin。這可能不會做你想做的。 (如果是這樣,在控制檯上「echo build.sh | gnome-terminal」也可以)。 – 2012-08-15 17:03:53

+0

@Frank Osterfeld \t 感謝您的幫助,它沒有按照我的意願工作。但我用「xterm」代替了「gnome-terminal」,它工作得很好。但唯一的問題是 - 在* sh完成後控制檯窗口關閉,如何防止它? QStringList args; args <<「/ mnt/hgfs/Share/android-cts-2.3_r12/tools/StartGB.sh」; PROC->開始( 「xterm的」,參數); proc-> waitForStarted(30000) – user1600019 2012-08-16 07:20:31

回答

0

有人說,你運行的程序是緩衝的,所以只有程序寫足夠的輸出,那麼你可以得到它們。

我現在正在處理這個問題,但到現在爲止,沒有找到任何幫助。

編輯:

OK,它最有可能的是,QProcess中使用事先管和管具有4K緩衝,這樣的想法是跳過這個緩衝區。

如果你喜歡stdbuf後運行程序:

stdbuf -i0 -o0 -e0 gnome-terminal 

它可能工作

0

Gnome終端的終端模擬器,它不`噸執行命令(如果不是內部命令)。

需要:

QProcess *proc = new Process(); proc->start("sh"); proc->waitForStarted();

或其他命令行解釋器(SH時,bash,cmd.exe的),然後可以寫命令到CLI與write方法。

如果你想讀的輸出,你需要這樣的:

QString tmp = mProcess->readAllStandardOutput();