src / Python / runProcess.ts
import { spawn } from "child_process";
export function runProcess(
cmd: string,
args: string[],
timeout: number,
cwd: string
): Promise<{ stdout: string; stderr: string }> {
return new Promise((resolve, reject) => {
const child = spawn(cmd, args, {
cwd,
timeout,
stdio: "pipe",
env: {
...process.env,
PYTHONUNBUFFERED: "1",
},
});
let stdout = "";
let stderr = "";
child.stdout.setEncoding("utf-8");
child.stderr.setEncoding("utf-8");
child.stdout.on("data", d => (stdout += d));
child.stderr.on("data", d => (stderr += d));
child.on("close", code => {
if (code === 0) resolve({ stdout: stdout.trim(), stderr: stderr.trim() });
else reject(new Error(stderr));
});
child.on("error", reject);
});
}