我正在尝试运行这个 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
如何读取此输出?
最佳答案
您尝试读取的应用程序可能正在将控制台输出发送到 stderr,在这种情况下您有几个选择:
直接从 stderr 读取:process.readAllStandardError()
将读取 channel 设置为只从 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;
}
关于c++ - QProcess:如何从 pactl 读取输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23224170/