使用 Qt 写入终端
Posted
技术标签:
【中文标题】使用 Qt 写入终端【英文标题】:Writing to the terminal using 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----”。
目的不是获取网络数据。我正在尝试通过的标准输入来执行 shell 命令。 ifconfig 只是一个例子
好吧,您需要解释用例以获得最佳建议。打开终端可能是红鲱鱼,但它可能是有效的。这需要澄清。目前尚不清楚您要达到什么目标,至少对我来说是这样。
我对 C# 应用程序不是特别感兴趣。我对用例是什么更感兴趣。潜在地,放弃这个概念可能会更好地移植。不要告诉我们它在做什么,而是告诉我们它试图实现什么。您需要了解它试图实现的目标才能正确移植它。
【参考方案1】:
好的,我找到了解决方案。使用 bash 而不是 xterm。我真的不确定为什么会这样。我的猜测是,当我使用 xterm 时,它打开了一个单独的窗口,并且 xterm 进程与主进程分离。但在 bash 中,它在与 qt 控制台应用程序相同的终端中执行所有操作。
【讨论】:
xterm 不接受标准输入的输入,而是将输入作为 X11 事件。我真的不明白你为什么要运行一个shell。您可以直接运行ipconfig
,而无需运行任何类型的shell以上是关于使用 Qt 写入终端的主要内容,如果未能解决你的问题,请参考以下文章