package builtin.programming; import builtin.BuiltinSub; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import gui.Constants; import gui.MintException; import gui.Pointer; import gui.PointerTools; import gui.SmartList; import gui.StrTools2; /** * @author Oliver Chu */ public class ExecutePython extends BuiltinSub { @Override public Pointer apply(SmartList<Pointer> args) throws MintException { String version = ""; String programName = PointerTools.dereferenceString(args.get(0)); if (programName.startsWith("[version:")) { int i = programName.indexOf(']'); String piece = StrTools2.slice(programName, 0, i); version = piece.replace("[version:", "").replace("]", ""); programName = StrTools2.slice(programName, i + 1); } try { programName = programName.trim(); if (!programName.endsWith(".py")) { programName += ".py"; } Process py = Runtime.getRuntime().exec("python" + version + " " + programName); BufferedReader in = new BufferedReader( new InputStreamReader(py.getInputStream())); String line = null; int i = 0; int limit = Integer.MAX_VALUE >>> 1; while (i < limit) { line = in.readLine(); if (line == null) { break; } System.out.println(line); i++; } } catch (IOException ex) { } return Constants.MINT_NULL; } }