【问题标题】:QProcess terminal inputQProcess终端输入
【发布时间】:2012-08-15 07:48:46
【问题描述】:

我不太擅长 Qt 并且对 Ubuntu 了解不多,但这是我的工作: 我启动 gnome-terminal,然后从它启动我的 *.sh 文件。如何从 Qt 中做到这一点? 我做了:

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

但只是终端正在打开,什么也没发生,我可以手动输入命令,但我需要从 QProcess 中完成。

【问题讨论】:

  • this问题
  • 两件事:1)当 start() 返回时,gnome-terminal 尚未启动。你必须连接到proc的started()信号或者调用waitForStarted()。 2) write() 写入终端的标准输入。那可能不会做你想要的。 (如果是这样,控制台上的“echo build.sh | gnome-terminal”也可以工作)。
  • @Frank Osterfeld 感谢您的帮助,它没有按我的意愿工作。但是我用“xterm”而不是“gnome-terminal”做了它,它工作得很好。但唯一的问题是 - 控制台窗口在 *sh 完成后关闭,如何防止它? QStringList 参数; argsstart("xterm",args); proc->waitForStarted(30000)
  • 不知道,那是特定于 xterm 的。

标签: qt input console qprocess


【解决方案1】:

据说你运行的程序是有缓冲的,所以只有程序写出足够的输出,你才能拿到。

我现在正在处理这个问题,但到目前为止还没有发现任何帮助。

编辑:

好吧,很可能Qprocess事先使用了管道,并且管道有一个4K的缓冲区,所以想法是跳过这个缓冲区。

如果你在stdbuf之后运行你的程序,比如:

stdbuf -i0 -o0 -e0 gnome-terminal

它可能会起作用

【讨论】:

    【解决方案2】:

    Gnome-terminal 是终端模拟器,它不执行命令(如果不是内部命令)。

    你需要:

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

    或其他命令行解释器(sh、bash、cmd.exe),然后您可以使用write 方法将命令写入CLI。

    如果你想读取输出,你需要这个:

    QString tmp = mProcess->readAllStandardOutput();

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-29
      • 2014-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多