私はコマンドラインプログラムを使用していますが、以下のように動作します:
$ ROUTE_TO_FOLDER/app < "long text"
「アプリ」が必要とするパラメーターを使用して「長いテキスト」が書き込まれると、テキスト ファイルに結果が書き込まれます。そうでない場合は、テキスト ファイルを継続的にドットで埋めます (これを回避するために「アプリ」のコードを処理または変更することはできません)。
Ruby スクリプトには、次のような行があります。
text = "long text that will be used by app"
output = system("ROUTE_TO_FOLDER/app < #{text}")
ここで、テキストが適切に記述されていれば問題はなく、前述のように出力ファイルが得られます。問題は、テキストがうまく書かれていない場合に発生します。次に何が起こるかというと、Ruby スクリプトがハングアップし、それを強制終了する方法がわかりません。
Open3を見つけて、次のような方法を使用しました。
irb> cmd = "ROUTE_TO_FOLDER/app < #{text}"
irb> stdin, stdout, stderr, wait_thr = Open3.popen3(cmd)
=> [#<IO:fd 10>, #<IO:fd 11>, #<IO:fd 13>, #<Thread:0x007f3a1a6f8820 run>]
私がする時:
irb> wait_thr.value
また、ハングします。
irb> wait_thr.status
=> "sleep"
これらの問題を回避するにはどうすればよいですか? 「アプリ」が失敗したことを認識していませんか?