【问题标题】:Writing to the terminal using Qt使用 Qt 写入终端
【发布时间】:2014-07-02 11:47:23
【问题描述】:

我需要通过 Qt 向终端提供输入来执行终端命令。我也想阅读输出。我找到了一种适用于 Windows 的解决方案 (QProcess problems, output of process)。代码如下:

#include <QtCore/QCoreApplication>
#include <QTextStream>
#include <QByteArray>
#include <QString>
#include <QProcess>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QTextStream qout(stdout);
    QByteArray result;
    QProcess cmd2;

    cmd2.setReadChannel(QProcess::StandardOutput);
    cmd2.setProcessChannelMode(QProcess::MergedChannels);
    cmd2.start("cmd");
    if (!cmd2.waitForStarted()){
        qout << "Error: Could not start!" << endl;
        return 0;
    }
    cmd2.write("ipconfig\n");
    cmd2.closeWriteChannel();   //done Writing

    while(cmd2.state()!=QProcess::NotRunning){
        cmd2.waitForReadyRead();
        result = cmd2.readAll();
        qout << result;
    }
    qout << endl << "---end----" << endl;
    return a.exec();
}

在 ubuntu 中,我将“cmd”更改为“xterm”,将“ipconfig”更改为“ifconfig”,但它不起作用!

【问题讨论】:

  • its not working 不工作。请解释实际输出是什么。另外,为什么您没有使用正确的 Qt 类获取网络数据?
  • 没有输出。当我关闭 xterm 窗口时,它只会在控制台应用程序中打印“---end----”。
  • 目的不是获取网络数据。我正在尝试通过使用 Qt 写入终端的标准输入来执行 shell 命令。 ifconfig 只是一个例子
  • 好吧,您需要解释用例以获得最佳建议。打开终端可能是红鲱鱼,但它可能是有效的。这需要澄清。目前尚不清楚您要达到什么目标,至少对我来说是这样。
  • 我对 C# 应用程序不是特别感兴趣。我对用例是什么更感兴趣。潜在地,放弃这个概念可能会更好地移植。不要告诉我们它在做什么,而是告诉我们它试图实现什么。您需要了解它试图实现的目标才能正确移植它。

标签: linux qt qprocess


【解决方案1】:

好的,我找到了解决方案。使用 bash 而不是 xterm。我真的不确定为什么会这样。我的猜测是,当我使用 xterm 时,它打开了一个单独的窗口,并且 xterm 进程与主进程分离。但在 bash 中,它在与 qt 控制台应用程序相同的终端中执行所有操作。

【讨论】:

  • xterm 不接受标准输入的输入,而是将输入作为 X11 事件。我真的不明白你为什么要运行一个shell。您可以直接运行ipconfig,而无需运行任何类型的shell
猜你喜欢
  • 1970-01-01
  • 2019-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多