2012-02-16 10 views
0

新しい仮想サーバーに適したIPアドレスを見つけるスクリプト(A)が見つかりました。最初に、彼が選んだ最初のipが別のサーバによってまだ取られていないかどうかを見るためにデータベースを調べます。 IPがまだ使用されていない場合、スクリプトはそれをpingします。 pingからの応答がない場合は、次のステップに進みます。これが問題の原因です。Ruby:スクリプト内から外部スクリプトを使用して比較する

次の手順では、IPアドレスがnetscaler(ルータ)に登録されているかどうかを確認する必要があります。これを行うには、同じマシンで別のスクリプトを使用する必要があります(B)。この他のスクリプトは、netscalerで定義されたすべてのipsのリストを返します。私はそれを実行すると、出力は、私は、スクリプトAをホワイティングからスクリプトBを実行するための多くの方法を発見したが、私は私が私がしたいのですが何をすることができます見つけたものはどれもこの

x.x.x.x 
x.x.x.x 
x.x.x.x (and so on..). 

のように見えます。

私の目標は、見つかったipのスクリプトと、リストされているすべてのものとを比較することです。最後のものは画面に表示されません。 1.2.3.4

それは、このリスト

1.2スクリプトAに戻ってくるスクリプトBを呼び出します:。

ので、それは少し明確にするために、のは、スクリップAがIPを見つけたとしましょう3.5 1.2.4.5 1.2.5.1 など。

となり、AはスクリプトBによって返されたすべてのものと1.2.3.4を実際に画面に表示せずに比較します。

ありがとうございました!

答えて

2

私はscriptB UIからscriptBビジネスロジックを分離します(CLI)ロジック:

scriptA.rb 
scriptB.rb 
netscaler.rb # extract logic here 

は別のクラス/メソッドにあなたのlist of all the ips defined in the netscalerロジックを抽出します。

#netscaler.rb 
class Netscaler 
    def self.list_ips 
    # return array of ips here 
    end 
end 

#scriptB.rb 
require_relative 'netscaler' 

ips = Netscaler.list_ips 
puts ips # script B may show these ips on the screen 
...  

#scriptA.rb 
require_relative 'netscaler' 

ips = Netscaler.list_ips 
# script A will not show them. Instead it will operate on the returned result. 
... 
+0

アドバイスと解決策をありがとうございました。すべてがうまくいきました!私は前にルビーでクラスを使ったことがなかったし、require_relativeをやったこともなかった。再度、感謝します! – Cocotton

0

あなたはスクリプトBを実行するためにバッククォートを使用することができます出力を返します。

ip_list = `scriptB`.split("\n") 

これはアレックスの組織的提案につなげることができます。スクリプトBがあなたが制御しないRuby以外のスクリプトであれば、私はこれを行います。

先頭または末尾に空白がある場合は、末尾に.map(&:strip)を追加できます。

関連する問題