c++ - C++ 读取QProcess输出到字符串

  显示原文与译文双语对照的内容
86 5

我有一个使用QProcess这样的代码。

int main(int argc, char *argv[])
{
 int status=0;
 QProcess pingProcess;
 QString ba;
 QString exec ="snmpget";
 QStringList params;
 params <<"-v" <<"2c" <<"-c" <<"public" <<"10.18.32.52" <<".1.3.6.1.4.1.30966.1.2.1.1.1.5.10";
 status=pingProcess.execute(exec, params);
 pingProcess.close();
}

这里输出输出如下。

SNMPv2-SMI::enterprises.30966.1.2.1.1.1.5.10 = STRING:"0.1"

我想将这里输出作为字符串。我找了这个,我找不到答案。先谢谢了。

时间: 原作者:

150 3

你尝试过QByteArray QProcess::readAllStandardOutput()这里是文档

QString 可以从 QByteArray 实例化:

QString output(pingProcess.readAllStandardOutput());

就像前面提到的,我加入了它们,你不应该使用 execute 方法并将它的替换为:

pingProcess.start(exec, params);
pingProcess.waitForFinished();//sets current thread to sleep and waits for pingProcess end
QString output(pingProcess.readAllStandardOutput());
原作者:
100 0

@Shf 是正确的,因为你应该使用 readAllStandardOutput 。但是,你正在使用 function execute(),它是 static 方法。你应该从QProcess的实例调用启动( ) 。

然后等待waitForReadyRead的数据,或者等待进程完成 waitForFinished ( ),也许也是一个好主意。

此外,还有一个重载启动函数,它允许你传递整个命令,这可能使你的代码更易于阅读:-

QProcess pingProcess;
QString exe ="snmpget -v 2c -c public 10.18.32.52. 1.3.6.1.4.1.30966.1.2.1.1.1.5.10";
pingProcess.start(exe);
pingProcess.waitForFinished();
QString output(pingProcess.readAllOutput());

请注意,调用waitForFinished将挂起当前进程,因这里需要动态地创建QProcess并连接到 finished() 信号。

原作者:
115 2

你不应该使用 QProcess::execute 方法,它是 static,并且不会改变你的pingProcess 变量。你无法访问使用这里方法启动的进程。你需要使用 start() 方法。请注意,这里方法是异步的。你需要使用 waitForFinished,然后读取数据。

pingProcess.start(exec, params);
pingProcess.waitForFinished();
QByteArray output = pingProcess.readAllStandardOutput();
原作者:
77 3

你可以尝试使用readyReadStandardOutput信号:

connect(&pingProcess, SIGNAL(readyReadStandardOutput()), this, SLOT(readData()));

在相应的slot readData中,指向字符串

QString输出= pingProcess.readAllStandardOutput() ;

原作者:
...