【发布时间】: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# 应用程序不是特别感兴趣。我对用例是什么更感兴趣。潜在地,放弃这个概念可能会更好地移植。不要告诉我们它在做什么,而是告诉我们它试图实现什么。您需要了解它试图实现的目标才能正确移植它。