以前Open3.popen3で外部コマンドの出力を随時受け取って表示するということをやったけど、それでは不便な場面が出てきた。 というのも、例えばgrepでマッチした部分を色付けしたものを得ようとしてもOpen3.popen3で受け取ることはできない。これはgrepが出力先がttyのときだけ色付けするようになっているのに対して、Open3.popen3のやりとりにttyが使われていないことが原因らしい。((出力先のIOがttyかどうかはrubyだとIO#tty?で調べられる。)) 正直ttyってなんなのかわからないけど、とりあえずPTY.spawnを使うと擬似ttyをruby上に作ったうえで外部コマンドとやりとりできるとのことがわかったのでやってみた。 require "pty" PTY.spawn("long-long-command") do |r, w, pid| # rはコマンドの
Rubyで外部コマンドを実行する手段はいろいろあるけど、そのほとんどは実行し終わったときにまとめて標準出力等を得ることになる。時間がかかるコマンドを実行しつつその出力を随時受け取りたい場合にはOpen3.popen3を使う。 require "open3" Open3.popen3("long-long-command") do |stdin, stdout, stderr, wait_thr| stdin.close_write # 標準入力を閉じる。 begin # 標準出力、標準エラーの出力があるまで延々と待ち、随時1行ずつ書き出す loop do IO.select([stdout, stderr]).flatten.compact.each do |io| io.each do |line| next if line.nil? || line.empty? puts line e
githubをうろうろしていたら「なるほど」と思ったコードを見つけたのでメモっておく。 get-twitter-oauth-token / bin / get-twitter-oauth-token (gistじゃないので残念ながら埋め込むことができない。コピペするのも微妙なのでリンクだけ提示しておく) これは@jugyoさん作のコマンドラインからTwitterのOAuthのアクセストークンと秘密鍵を取得するスクリプトで、openコマンドを使ってるあたり多分Mac専用なんだと思う(Linuxとかでもあるのかな?)。 なるほどなーと思ったのはStringを拡張しているcolorとaskという二つのメソッド。 colorはその名のとおり文字列に色をつけるもので、引数numにはANSIエスケープシーケンス(?)で指定できる色の番号を渡す(「bashのプロンプトに色をつける」などを参照。zshでも
watchrで更新のあったファイルに対してrspecを実行する方法。 secondlifeさんの記事を読んで、取り急ぎやってみた。 $ gem install watchr $ gem install ruby-fsevent # Mac OSXの場合 $ gem install rev # Linux/*BSDの場合 $ cd (RAILSアプリのルートディレクトリ) $ vi spec.watchr watch('app/(.*)\.rb') { |md| system("ruby script/spec spec/#{md[1]}_spec.rb") } watch('spec/(.*)_spec\.rb') { |md| system("ruby script/spec #{md[0]}") } $ watchr spec.watchr autospecより汎用性があって便利かも。
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く