2016-09-30 6 views
2

私はRubyで、コマンドラインプログラムをラップするはずの簡単な自動化ツールを書きたいと思っています。別のプログラムのSTDOUTとSTDINの両方をラップするプログラムの作成方法は?

コマンドラインプログラムは、REPLのように動作します。コマンドはSTDINから入力でき、出力はSTDOUTに戻されます。したがって、Rubyツールは、プログラムのSTDOUTからの入力を読み取ることができ、新しいコマンドをプログラムSTDINに戻すことができる必要があります。

このようなサイクリック入出力はどのように設定できますか? この質問がRubyに関するものなのか、それとも一般的なUnixシステムでストリームをどのように接続できるのかということについては、私は完全にはわかりません。

+0

「[ask]」とお読みください。調査してはならないことをどうやって行うかを説明してから、コードを書こうとした後、具体的な質問をしました。 "どのくらいの研究努力がStack Overflowユーザーに期待されていますか?"(http://meta.stackoverflow.com/a/261593/128421) "代わりに、チュートリアルをお願いしています。 Rubyには、あなたが望むことを行うための複数の方法があります。 [Open3](http://ruby-doc.org/stdlib-2.3.1/libdoc/open3/rdoc/Open3.html)のドキュメントは、インターネット上のさまざまなページと同様に、説明に役立ちます。 –

+0

@theTinManご意見ありがとうございました。私はこれまで、プログラムを別のプログラムに二元的に接続する方法について何かを見つけることで運がなかった。私はまた、そのような状況を適切に記述するために何の専門用語**を使用することができるのか分からなかった。これが私が質問した理由です。もちろん、どのくらいの研究が必要なのかは非常に主観的なものなので、私は完全にあなたの下降理由を理解しています。いずれにしても、Open3モジュールへのリンクはすでに大いに役立っています。ありがとうございました。 – Qqwy

+0

[Rubyでサブプロセスと通信する](http://stackoverflow.com/questions/27590702/communicate-with-subprocess-in-ruby) –

答えて

2

IO.popen

handler = IO.popen("bash","w+") 

handler.puts("whoami") 
puts handler.gets 

handler.puts("date") 
puts handler.gets 

handler.close 

出力を達成するために非常に簡単です:私たちは読み取りおよび書き込みを意味しているw+でサブプロセスを開いていることを

wrodevlopot:tmp lopot$ ruby test.rb 
lopot 
Sat Oct 1 21:57:42 CEST 2016 

IO.popenはIOハンドラを返し、あなたの心は、 。上記の例では、コマンドwhoamiを送信しているbashプロセスを開いてから、コマンドdateと同じものを読み取り、それを印刷します。終了すると、閉じるプロセスが完了します。

関連する問題