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() ;

原作者:
...