このような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"
この出力を文字列として取得(読み取り)したい。私はこれを検索しましたが、解決策を見つけることができません。前もって感謝します。
試しましたかQByteArray QProcess::readAllStandardOutput()
docs- here
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());
@Shfは、readAllStandardOutputを使用する必要があるという点で正しいです。ただし、静的メソッドである関数execute()を使用しています。 QProcessのインスタンスからstart()を呼び出す必要があります。
その後、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()シグナルに接続して、接続されているスロットをその状態にしてください。データを読み取ります。
よりQtの方法では、readyReadStandardOutput信号を使用することができます。
connect(&pingProcess, SIGNAL(readyReadStandardOutput()), this, SLOT(readData()));
そして、対応するスロットのreadDataで文字列に
QString出力= pingProcess.readAllStandardOutput();
_QProcess::execute
_メソッドは使用しないでください。これは静的で、pingProcess
変数を変更しません。このメソッドを使用して開始されたプロセスにアクセスできません。代わりにstart()
メソッドを使用する必要があります。このメソッドは非同期であることに注意してください。 waitForFinished
を使用して、データを読み取る必要があります。
_pingProcess.start(exec, params);
pingProcess.waitForFinished();
QByteArray output = pingProcess.readAllStandardOutput();
_