c++ - QProcess:如何从 pactl 读取输出

标签 c++ bash qt qprocess

我正在尝试运行这个 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/

相关文章:

linux - 如何通过从文件名中删除某些字符来重命名 linux 中的文件?

qt - 如何在 QMediaPlayer 中播放音频和删除文件?

c++ - Matlab API 使用 STL 容器从 C++ 读取 .mat 文件

c++ - cmake add_dependency、add_custom_command 和 add_custom_target 不能一起工作

c - 通过标准输入发送 SIGINT

c++ - 使用 moveToThread 时是否需要锁定

c++ - 对 vtable 的 undefined reference ...

java - 从 C++ 使用 Java

c++ - 销毁并重新创建对象是否会使指向该对象的所有指针都无效?

bash - 将标准输入复制到标准输出