想要用java编写一个自动测评机,要测评的程序也是java写的
目前进度:用
Process p = Runtime.getRuntime().exec("cmd /k java test/Test");
可以调用命令行来执行Test.class的main函数
用
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream())); String readLine = br.readLine(); while (readLine != null) { readLine = br.readLine(); System.out.println(readLine); }
可以获得main函数的输出
那么如何向main函数中传递参数呢?
目前尝试了用
PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(p.getOutputStream()))); pw.println("Hello world!");
向main传递一个字符串“Hello world!”,但是并不会得到相应的结果
用
Runtime.getRuntime().exec("cmd /k hahahaha\n");
尝试直接从命令行输入,也无效
Test类:
public class Test { public static void main(String[] argv){ Scanner scanner = new Scanner(System.in); System.out.println("Waiting for input...."); String a = scanner.nextLine(); System.out.println("Success!"); System.out.println(a); } }
测评机程序:
Runtime.getRuntime().exec("cmd /k start d:"); Runtime.getRuntime().exec("cmd /k cd Chaos/Program/Java/OO/Pre2/out/production/Pre2"); Process p = Runtime.getRuntime().exec("cmd /k java test/Test"); // Runtime.getRuntime().exec("cmd /k hahahaha\n"); PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(p.getOutputStream()))); pw.println("Hello world!"); BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream())); String readLine = br.readLine(); while (readLine != null) { readLine = br.readLine(); System.out.println(readLine); }
测评机执行结果:
Waiting for input....