Rubyで外部コマンドの出力をGtk::TextViewに表示
外部コマンドの出力をパイプで取得してそのままGTKのテキストビューに表示するプログラムを書いてみました。
単純な方法でやっているので、ただ単に標準出力を表示するだけですが、
リアルタイムに出力を取得しているので、少しずつ出力されるコマンドは少しずつ表示されるようになっています。
「ruby -v」を実行して、結果(Rubyのバージョン)を表示するコードを書いておきます。
IO.popenでパイプで接続してコマンドを実行し、それからeachで一行ずつ読み出して追加しています。
すぐに終わるコマンドではあまり関係ないかもしれませんが、すぐには終わらないコマンドで、一行ではなく一文字ずつ出力されるコマンドでは修正する必要があるかもしれません。
require 'gtk2' Gdk::Threads.init Gtk.init window = Gtk::Window.new window.set_size_request(320, 240) buffer = Gtk::TextBuffer.new view = Gtk::TextView.new(buffer) window.add(view) window.show_all thread = Thread.start { IO.popen("ruby -v") { |pipe| pipe.each { |line| buffer.insert_at_cursor(line) } } buffer.insert_at_cursor("プロセスが終了しました") } window.signal_connect("delete_event") { thread.kill Gtk.main_quit } Gtk.main thread.join