shonen.hateblo.jpスマートフォン用の表示で見るshonen.hateblo.jpやったこと,しらべたことを書く.2019-07-10Rubyでstdinもstdoutもstderrもtimeoutも出来る万能execRuby勢いで記事を生やした。[x86_64-linux-gnu]何を作るか別のプログラムを引数付きで起動したり、標準入力を与えたり、標準出力や標準エラーを取得したりしたい。作ったか毎回書いているような気がしたから。1つ型を作っておいたほうが良さそう。出来る出来ないことは、インタラクティブに標準入出力をやりとりすること。その場合はpopenをちゃんと書いたほうが良い。利用例a.rbがあるとする。'arg2'])次を得る。タイムアウト以外は正しく動作しているのが確認できる。"stderr:foo\n"]テクニック的なところタイムアウト処理タイムアウトをキーワードにして適当にググると、Timeoutモジュールが引っかかる。このモジュールは少し問題があって、IOでブロッキングされるとTimeout出来なくなる。timelimitして、先に終わったほうがスレッドを操作して...とやっていたが、最近になってThread#joinが使えることを知った。そのスレッドが終了するまで親スレッドを待機するメソッドだが、パラメータを指定することで、「スレッドが終了あるいは一定時間経過するまで」親スレッドを待機出来る。一定時間経過したかどうかは返り値で分かる。これを使えば簡単にタイムアウト処理を実装できそう。帰ってくるioでは、標準入力と標準出力しか操作できない。IO.pipeで入力用ioと出力用ioを取得する。引数を通して、出力用ioを標準エラー用パイプとして渡す。その後、こちらでは出力用ioは使わないので、クローズする(クローズしないと子プロセスが書き込めない?)。叩くことで、標準エラーを得ることができる。文字列・シンボルからクラスインスタンスを取得する月別アーカイブはてなブログをはじめよう!m_buyohさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。