Skip to content

Commit e79b40a

Browse files
authored
fix: redirect logs in execute_skills (#378)
1 parent 4f38442 commit e79b40a

File tree

1 file changed

+45
-6
lines changed

1 file changed

+45
-6
lines changed

veadk/tools/builtin_tools/execute_skills.py

Lines changed: 45 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -157,23 +157,62 @@ def execute_skills(
157157
code = f"""
158158
import subprocess
159159
import os
160+
import time
161+
import select
162+
import sys
160163
161164
env = os.environ.copy()
162165
for key, value in {env_vars!r}.items():
163166
if key not in env:
164167
env[key] = value
165168
166-
result = subprocess.run(
169+
process = subprocess.Popen(
167170
{cmd!r},
168171
cwd='/home/gem/veadk_skills',
169-
capture_output=True,
172+
stdout=subprocess.PIPE,
173+
stderr=subprocess.PIPE,
170174
text=True,
171175
env=env,
172-
timeout={timeout - 10},
176+
bufsize=1,
177+
universal_newlines=True
173178
)
174-
print(result.stdout)
175-
if result.stderr:
176-
print(result.stderr)
179+
180+
start_time = time.time()
181+
timeout = {timeout - 10}
182+
183+
with open('/tmp/agent.log', 'w') as log_file:
184+
while True:
185+
if time.time() - start_time > timeout:
186+
process.kill()
187+
log_file.write('log_type=stderr request_id=x function_id=y revision_number=1 Process timeout\\n')
188+
break
189+
190+
reads = [process.stdout.fileno(), process.stderr.fileno()]
191+
ret = select.select(reads, [], [], 1)
192+
193+
for fd in ret[0]:
194+
if fd == process.stdout.fileno():
195+
line = process.stdout.readline()
196+
if line:
197+
log_file.write(f'log_type=stdout request_id=x function_id=y revision_number=1 {{line}}')
198+
log_file.flush()
199+
if fd == process.stderr.fileno():
200+
line = process.stderr.readline()
201+
if line:
202+
log_file.write(f'log_type=stderr request_id=x function_id=y revision_number=1 {{line}}')
203+
log_file.flush()
204+
205+
if process.poll() is not None:
206+
break
207+
208+
for line in process.stdout:
209+
log_file.write(f'log_type=stdout request_id=x function_id=y revision_number=1 {{line}}')
210+
for line in process.stderr:
211+
log_file.write(f'log_type=stderr request_id=x function_id=y revision_number=1 {{line}}')
212+
213+
with open('/tmp/agent.log', 'r') as log_file:
214+
output = log_file.read()
215+
print(output)
177216
"""
178217

179218
res = ve_request(

0 commit comments

Comments
 (0)