我有一个使用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"
我想把这个输出作为QString读取。我搜索了这个问题,但找不到解决方案。
先谢了。
4条答案
按热度按时间gmxoilav1#
你试过
QByteArray QProcess::readAllStandardOutput()
docs -这里吗QString
可以从QByteArray
示例化:正如其他人提到的,我加入他们,你不应该使用
execute
方法,并将其替换为:qmb5sa222#
您可以尝试使用readyReadStandardOutput信号的更多Qt方式:
并在相应的插槽中将readData写入字符串
QString输出= pingProcess.读取所有标准输出();
clj7thdc3#
@Shf是正确的,因为你应该使用readAllStandardOutput。但是,你使用的函数execute()是一个静态方法。你应该从一个QProcess的示例调用start()。
最好使用waitForReadyRead等待数据,或者使用waitForFinished()等待进程完成。
此外,还有一个重载的start函数,它允许您传入整个命令,这可能会使您的代码更容易阅读:-
请注意,调用waitForFinished将挂起当前进程,因此,如果您要执行一些需要一段时间的操作,则需要动态创建QProcess并连接到finished()信号,以便连接的插槽读取数据。
ljo96ir54#
您不应该使用
QProcess::execute
方法,它是静态的,不会改变您的pingProcess
变量。您无权访问使用此方法启动的进程。您需要改用start()
方法。请注意,此方法是异步的。您需要使用waitForFinished
,然后读取数据。