質問編集履歴
1
追記
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
|
+
何方かお教えいただけると幸いです。
|