正在打印卷曲命令而不是存储在 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 输出,而不必创建和读取文件。
当我 运行 这个简单的 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 输出,而不必创建和读取文件。