我使用IO.popen
运行curl
命令(octet stream POST)。我复制命令并在命令行上运行它,它工作了。然而,用popen
在Ruby中运行它会导致流在我的服务器上意外结束,Ruby脚本只是挂起,curl
无休止地运行。
我是这样做的:
curl = "curl "
curl += "--cookie "JSESSIONID=#{@sessionid}" "
curl += "-H "Content-type:application/octet-stream" "
curl += "-X POST "
curl += "-o "#{responseFile}" "
curl += "--data-binary "@#{filename}" "
curl += ""#{url}""
puts "command: #{curl}"
IO.popen(curl, "r") { |out|
out.readlines
}
# Script never makes it to here
我一定是做了什么傻事。这是什么?这是curl的标准输出。
我使用的是Ruby 1.8.6
我猜curl也想从stdin POST到服务器,那里没有任何东西来自,所以它来了一个30秒的超时popen
还为curl提供了从读取的管道,如下例所示:$ echo -e 'foonbarnzoo' |
ruby -e 'pipe = IO.popen("grep oo", "r") {|out| p out.readlines}'
["foon", "zoon"]
与其编写自己版本的wheel,为什么不利用Ruby中做同样事情的许多gem呢?
我推荐和伤寒,遏制为起点。此外,内置的OpenURI可以很好地满足大多数"get"类型的需求。
有一个有用的线程在SO这个帖子请求也。