2012-08-15 174 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();