我并不擅长Qt,在Ubuntu上没有太多知识,但是这里是我所做的: 我启动gnome-terminal,然后从它启动我的* .sh文件。如何从Qt做到这一点? 我做:QProcess终端输入
QProcess *proc = new QProcess;
proc->start("gnome-terminal");
proc->write("build.sh\n");
但就终端开什么也没有发生,我可以mannualy输入命令,但我需要从QProcess中做到这一点。
我并不擅长Qt,在Ubuntu上没有太多知识,但是这里是我所做的: 我启动gnome-terminal,然后从它启动我的* .sh文件。如何从Qt做到这一点? 我做:QProcess终端输入
QProcess *proc = new QProcess;
proc->start("gnome-terminal");
proc->write("build.sh\n");
但就终端开什么也没有发生,我可以mannualy输入命令,但我需要从QProcess中做到这一点。
有人说,你运行的程序是缓冲的,所以只有程序写足够的输出,那么你可以得到它们。
我现在正在处理这个问题,但到现在为止,没有找到任何帮助。
编辑:
OK,它最有可能的是,QProcess中使用事先管和管具有4K缓冲,这样的想法是跳过这个缓冲区。
如果你喜欢stdbuf
后运行程序:
stdbuf -i0 -o0 -e0 gnome-terminal
它可能工作
Gnome终端的终端模拟器,它不`吨执行命令(如果不是内部命令)。
需要:
QProcess *proc = new Process(); proc->start("sh"); proc->waitForStarted();
或其他命令行解释器(SH时,bash,cmd.exe的),然后可以写命令到CLI与write
方法。
如果你想读的输出,你需要这样的:
QString tmp = mProcess->readAllStandardOutput();
参见[这](http://stackoverflow.com/questions/9086771/how-to-start-a-shell- script-with-qprocess)问题 – dvvrd 2012-08-15 08:01:12
两件事情:1)当start()返回时,gnome-terminal尚未启动。你必须连接到proc的start()信号或者调用waitForStarted()。 2)写入()写入终端的stdin。这可能不会做你想做的。 (如果是这样,在控制台上“echo build.sh | gnome-terminal”也可以)。 – 2012-08-15 17:03:53
@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