Ruby One liner |测试远程主机端口
我正在尝试Ruby中的Perl命令 PerlRuby One liner |测试远程主机端口,ruby,sockets,Ruby,Sockets,我正在尝试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..
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,它将引发一个错误,因此您需要挽救错误条件。它在一定程度上改变了流程,但仍然非常可行:
loop { break if (TCPSocket.open("localhost",80) rescue nil); puts "Wait...."; sleep 1 }
从另一个答案可以看出,可以从Perl版本进行更字面的转换。只需使用Ruby表达式
(TCPSocket.open(“localhost”,80)rescue nil)
来替换Perl的新IO::Socket::INET(“localhost:80”)
,这样Ruby的引发错误行为在无法创建对象时与Perl的return undef更匹配。这类似:
require 'socket'
(puts "Waiting..."; sleep 1) until (TCPSocket.open("localhost",3000) rescue nil)
完整命令行:
ruby -r socket -e '(puts "Waiting..."; sleep 1) until (TCPSocket.open("localhost",3000) rescue nil)'
谢谢它工作得很好。。请给我推荐学习Ruby的链接。像你一样D@Rahul帕蒂尔:我从中学到了,如果你已经知道如何用另一种语言编写代码,我认为这是一个很好的参考。每个人的学习方式都不一样,所以很难做出一般性的推荐。谢谢你的回复。。我将从那本书开始练习:D