我正在尝试在 Ruby 中使用 Perl 命令
Perl
perl -MIO::Socket::INET -e 'until(new IO::Socket::INET("localhost:80")) { print "Waiting for network..\n"; sleep 1}'
我如何在 ruby 中做同样的事情?
我试过了:
require 'socket'
until !( TCPSocket.new("localhost",80).close ) do
puts "Wait..."
sleep 1
end
我正在寻找一种 Ruby 语言的衬垫。
最佳答案
主要区别在于,如果无法建立 IO,Ruby 将引发错误,因此您需要挽救错误情况。它稍微改变了流程,但仍然非常可行:
loop { break if (TCPSocket.open("localhost",80) rescue nil); puts "Wait...."; sleep 1 }
从其他答案可以看出,可以从 Perl 版本进行更直接的转换。只需使用 Ruby 表达式 (TCPSocket.open("localhost",80) rescue nil)
来替换 Perl 的 new IO::Socket::INET("localhost:80")
以便 Ruby 的引发错误行为更好地匹配 Perl 的在无法创建对象时返回 undef。
关于 ruby 一类轮 |测试远程主机端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23989176/