2017-08-07 7 views
0

ruby​​でOpen3モジュールを使って "top -n 1"コマンドを実行しようとしています。ruby​​でOpen3を使ってtopコマンドを実行する

は、これは私のコード

command = "top -n 1" 
Open3.popen3 (command) do |i,o,e,t| 
     i.close 
     exit_status = t.value 
     unless exit_status.success? 
       puts "NOPE" 
     end 
     t.value 
end 

NOPE私が得るすべてです。 o.readまたはo.getsを印刷しようとしても、空白行が表示されます。

私はopen3を使ってそのコマンドを実行できますか?それを実行する他の方法はありますか?私は何か間違っているのですか?

システムコマンドを実行するためにバッククォート( `)を使うことができます。それはいい練習ですか?私はいくつかの記事とブログがそれがそうではないと言いました。

ありがとうございます。

答えて

1

あなたはブロックパラメータeを印刷することで、あなたの問題を見ることができます:

エラーは次のようにする必要があります:

トップ:実行しようとしたときのtty

これが一般的です取得に失敗しましたtopが非インタラクティブモードです。これを無効にするには、-bオプションがtopである必要があります。

-b :Batch-mode operation 
    Starts top in Batch mode, which could be useful for sending output from top to other programs or to a file. In this mode, top will not accept input and 
    runs until the iterations limit you've set with the `-n' command-line option or until killed. 

command = 'top -bn 1'はokです。

また、ルビーのシステムコールには多くの方法があります。check them here

+0

ありがとうございます。できます。 :) –

+0

@AnishV喜んで助けてください。この答えが受け入れられるなら、私はそれを感謝します。 – halfelf

+0

オーバーフローのスタックオーバーフローも新しくなりました。マークされた。 :) –

関連する問題