質問編集履歴

1

追記

2016/12/22 07:34

投稿

Neight
Neight

スコア127

test CHANGED
File without changes
test CHANGED
@@ -79,3 +79,105 @@
79
79
  このときに標準出力内に入力が含まれたログを取りたいと考えています。
80
80
 
81
81
  どの様にすればよいでしょうか?
82
+
83
+
84
+
85
+ ---
86
+
87
+ 追記
88
+
89
+
90
+
91
+ otnさんの回答を基に次のようなスクリプトを作成しました。
92
+
93
+
94
+
95
+ ```Ruby
96
+
97
+ require 'open3'
98
+
99
+
100
+
101
+ data=10
102
+
103
+ Open3.popen3("./a.out") do |i, o, e, w|
104
+
105
+ begin
106
+
107
+ # puts "ouput:"
108
+
109
+ print o.read_nonblock(100)
110
+
111
+ rescue IO::WaitReadable
112
+
113
+ # puts "IO::WaitReadable"
114
+
115
+ sleep(0.01)
116
+
117
+ retry
118
+
119
+ rescue
120
+
121
+ # puts "rescue:"
122
+
123
+ i.puts(data)
124
+
125
+ puts data
126
+
127
+ end
128
+
129
+
130
+
131
+ i.close
132
+
133
+
134
+
135
+ o.each do |line| puts line end
136
+
137
+ e.each do |line| puts line end
138
+
139
+ end
140
+
141
+ ```
142
+
143
+ これでおおよ上手く動作したのですが、1つ懸念事項があります。
144
+
145
+ 質問内で使用したC++のプログラムを次のように改変した場合にIO::WaitReadableのエラーが吐かれ続けてしまい、無限ループになってしまうという問題です。
146
+
147
+ ```C++
148
+
149
+ #include <iostream>
150
+
151
+ using namespace std;
152
+
153
+
154
+
155
+ int main(void)
156
+
157
+ {
158
+
159
+ int num;
160
+
161
+
162
+
163
+ // 初期出力をなくした場合
164
+
165
+ // cout << "input num:";
166
+
167
+ cin >> num;
168
+
169
+
170
+
171
+ cout << "output num:" << num << endl;
172
+
173
+
174
+
175
+ return 0;
176
+
177
+ }
178
+
179
+ ```
180
+
181
+ 何故このような自体になってしまうかがよく分かりません。
182
+
183
+ 何方かお教えいただけると幸いです。