正在打印卷曲命令而不是存储在 Ruby 中

Curl command being printed instead of stored in Ruby

当我 运行 这个简单的 ruby 脚本时:

a = `curl localhost`
puts "Result is: #{a}"


=> % Total    % Received % Xferd  Average Speed   Time    Time     Time  CurrentDload  Upload   Total   Spent    Left  Speed
=> 0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--    0curl: (7) Failed to connect to localhost port 80: Connection refused
=> Result is:

看到命令为运行时正在打印结果,变量为空。但是,如果我 运行 任何其他格式相同的命令,它会按我的预期工作:

a = `ls`
puts "Result is: #{a}"

=> Result is: test.rb

如何将第一个 curl 命令的结果存储到变量中?

来自man curl

curl normally displays a progress meter during operations, this data is displayed to the terminal by default... If you want a progress meter for HTTP POST or PUT requests, you need to redirect the response output to a file, using shell redirect (>), -o, --output or similar.

使用反引号时会发生什么,它只会获取命令的标准输出 (stdout)。

如果您需要 curl 输出,可以使用 -o 选项,这会创建一个包含输出的文件,然后您可以根据需要使用它。

`curl localhost -o curl_localhost_output.txt`
puts File.read('path-to-file/curl_localhost_output.txt')

也存在 "a way" 将 stderr 重定向到 stdout,但不是重定向到 stdout,而是重定向到名为 1 的文件,因此您可以使用 curl localhost 2>&1 并存储 curl 输出,而不必创建和读取文件。