如果我调用一个命令使用内核#系统在Ruby中,我如何得到它的输出?

system("ls")

当前回答

puts `date`
puts $?


Mon Mar  7 19:01:15 PST 2016
pid 13093 exit 0

其他回答

我发现下面是有用的,如果你需要返回值:

result = %x[ls]
puts result

我特别想列出我的机器上所有Java进程的pid,并使用以下方法:

ids = %x[ps ax | grep java | awk '{ print $1 }' | xargs]

将标准输出捕获到名为val的变量中最简单的解决方案:

val = capture(:stdout) do
  system("pwd")
end

puts val

缩短版本:

val = capture(:stdout) { system("ls") }

捕获方法由 active_support / core_ext /内核/ reporting.rb

类似地,我们也可以用:stderr捕获标准错误

我想扩展和澄清一下混沌的答案。

如果你用反勾号包围命令,那么你根本不需要(显式地)调用system()。反勾号执行命令并以字符串形式返回输出。然后你可以像这样把值赋给一个变量:

output = `ls`
p output

or

printf output # escapes newline chars
puts `date`
puts $?


Mon Mar  7 19:01:15 PST 2016
pid 13093 exit 0

只是为了记录,如果你想要(输出和操作结果),你可以这样做:

output=`ls no_existing_file` ;  result=$?.success?