【问题标题】:Redirect output of Linux system() call command to a varriable only仅将 Linux system() 调用命令的输出重定向到变量
【发布时间】:2018-10-15 11:01:23
【问题描述】:

我必须在我的 C++ 代码中运行系统命令:

int val = system( "pacmd list-sink-inputs | grep -c 'state: RUNNING'" );

该命令将结果返回给val,这是可取的,但val 或调用的返回(我似乎无法弄清楚是哪一个)也被写入stdout 并打印在终端。

有没有办法将呼叫重定向到写到stdout或除val以外的任何地方?

【问题讨论】:

    标签: c++ linux command io-redirection


    【解决方案1】:

    将最后一个命令的输出重定向到/dev/null 就可以了。

    最终的命令如下所示:

    int val = system( "pacmd list-sink-inputs | grep -c 'state: RUNNING' > /dev/null" );
    

    Here 是一篇很好的帖子,它解释了/dev/null

    【讨论】:

      【解决方案2】:

      Bash Pipelines 会有所帮助。

      如果使用|&,则command的标准错误通过管道连接到command2的标准输入;它是 2>&1 | 的简写。

      因此你可以使用下面的命令

      int val = system( "pacmd list-sink-inputs &| grep -c 'state: RUNNING'" );

      int val = system( "pacmd list-sink-inputs 2>&1| grep -c 'state: RUNNING'" );

      【讨论】:

      • 这并没有解决问题,它仍然被发送到控制台
      • grep 也在写入 stderr,我希望它无处写入,bash 应该丢弃 grep 的结果。
      • 如果 grep 也在写入 stderr,您可以将 stderr 重定向到 stdout。 int val = system("pacmd list-sink-inputs 2>&1| grep -c 'state: RUNNING' 2>&1" );
      • 您使用哪种语言?我认为您可能会滥用功能系统。和 python 一样,我们可以使用 val = subprocess.check_output("pacmd list-sink-inputs 2>&1| grep -c 'state: RUNNING'" ) 将命令结果设置为 val。但是,如果我们使用 val = subprocess.call("pacmd list-sink-inputs 2>&1| grep -c 'state: RUNNING'") , val 的值将更难得到我们只调用 retcode 的命令的结果。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-01
      • 2012-05-06
      • 2012-07-05
      • 2011-12-15
      • 1970-01-01
      • 2019-07-19
      相关资源
      最近更新 更多