我正在尝试运行此bash命令
$pactl list sinks short | grep 10_B7_F6_02_1B_4A
在我的c ++项目中使用QProcess并使用readAllStandardOutput()获取输出,如this post所示。当我在命令的开头放置echo并将10_B7_F6_02_1B_4A放在管道之前时,我得到了正确的输出到我的QByteArray中。然而,pactl的输出格式似乎与echo的输出格式不同。在终端中它看起来像这样:
$ pactl list sinks short | grep 10_B7_F6_02_1B_4A
2 bluez_sink.10_B7_F6_02_1B_4A module-bluez5-device.c s16le 2ch 44100Hz SUSPENDED
如何阅读此输出?
答案 0 :(得分:3)
您尝试读取的应用程序可能正在向stderr发送控制台输出,在这种情况下,您有几个选项:
直接从stderr读取:process.readAllStandardError()
将读取通道设置为只读取stderr:process.setReadChannel(QProcess :: StandardError)
不顾一切地从stderr和stdout读取! :process.setProcessChannelMode(QProcess :: MergedChannels)
另一种可能性是您向QProcess输入了不正确的参数。您似乎正在尝试管道上面的数据,使用QProcess执行此操作的正确方法是这样的:
#include <QCoreApplication>
#include <QProcess>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
QProcess pactl;
QProcess grep;
pactl.setStandardOutputProcess(&grep);
pactl.start("pactl list sinks short");
grep.start("grep 10_B7_F6_02_1B_4A");
pactl.waitForFinished();
grep.waitForFinished();
qDebug() << grep.readAll();
return EXIT_SUCCESS;
}