隐藏系统命令导致ruby

dej*_*jay 12 ruby command system

在ruby中隐藏系统命令的结果有多容易?例如,我的一些脚本运行

system "curl ..." 
Run Code Online (Sandbox Code Playgroud)

我不希望看到下载的结果.

tad*_*man 11

如果您愿意,可以使用更复杂的popen3分别控制STDIN,STDOUT和STDERR:

Open3.popen3("curl...") do |stdin, stdout, stderr, thread|
  # ...
end
Run Code Online (Sandbox Code Playgroud)

如果你想让某些流静音,你可以忽略它们,或者如果重定向或解释那个输出很重要,你仍然可以使用它.

  • 您可能需要"要求'open3'".如果要处理输出,请使用"myvarname = stdin.read". (3认同)

tex*_*uce 5

最简单的方式除了popen:

  1. 使用%x而不是系统.它会自动管道

    rval = %x{curl ...}       #rval will contain the output instead of function return value
    
    Run Code Online (Sandbox Code Playgroud)
  2. 手动管道到/ dev/null.在UNIX中工作,如系统,而不是Windows

    system "curl ... > /dev/null"
    
    Run Code Online (Sandbox Code Playgroud)


nor*_*raj 5

要在system不修改命令的情况下使其正常工作:

system('curl ...', :err => File::NULL)
Run Code Online (Sandbox Code Playgroud)

资源

  • +1 绝对是最优雅和最简单的解决方案,因为它仍然使用 `system` 功能,并且不是特定于操作系统的。 (2认同)
  • 如果您想同时重定向“out”和“err”,您还可以使用“[ :out, :err ] => File::NULL”。 (2认同)