@@ -157,23 +157,62 @@ def execute_skills(
157157 code = f"""
158158import subprocess
159159import os
160+ import time
161+ import select
162+ import sys
160163
161164env = os.environ.copy()
162165for 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