タイトルのとおりです。
実行ファイルを、端末からではなくRubyで実行して、入出力を対話的に行いたいです。
ただ、下のプログラムを動かすと、なにも出力せずとまります。
メッセージを読んだ感じだと、each_lineで止まってしまっているので、stdoutに出力が来ていないのかなと思ったのですが、どのタイミングで出力できるのでしょうか?
Cのソースコードを、
fgets
fgets
printf
printf
にしたら予想通り出力がでました。
bash
1gcc -o test test.c 2ruby test.rb 3#ctr+C 4test.rb:9:in `each_line': Interrupt 5 from test.rb:9:in `block in <main>' 6 from /usr/share/ruby/open3.rb:217:in `popen_run' 7 from /usr/share/ruby/open3.rb:99:in `popen3' 8 from test.rb:3:in `<main>' 9
C
1//test.c 2#include <stdio.h> 3 4int main(int argc, char const *argv[]) 5{ 6 char str[128]; 7 char str2[128]; 8 9 fgets(str,128,stdin); 10 11 printf(str); 12 13 fgets(str2,128,stdin); 14 15 printf(str2); 16 17 return 0; 18}
Ruby
1#test.rb 2require 'open3' 3 4Open3.popen3('./test'){|stdin, stdout| 5 str = 'hello' 6 str2 = 'see you soon' 7 8 stdin.puts str 9 10 stdout.each_line {|line| 11 puts line 12 } 13 14 stdin.puts str2 15 16 stdout.each_line {|line| 17 puts line 18 } 19}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/03/02 05:33
2017/03/02 14:48
2017/03/16 12:42