gpt4 book ai didi

java - 如何使用java在cmd中运行的程序中输入

转载 作者:行者123 更新时间:2023-12-01 10:40:41 24 4
gpt4 key购买 nike

我正在创建一个程序,它将接受源代码,对其进行编译,并输入测试用例以查看程序是否正确。如果可以的话,可以使用源代码检查器。我用来编译程序的是通过cmd。我现在的问题是程序在cmd中运行后如何输入测试用例。这实际上是我们学校的一个计划。因此,教授会给出一个问题(例如,输入一个整数,说它是偶数还是奇数),然后该程序将通过测试教授提供的测试用例来检查学生的源代码(例如,输入:1 输出:奇数,输入 2:输出:偶数)。

这是我的示例代码(c# 编译器)

case ".cs":
CsCompiler();
Run(path + "\\program");
break;

我的功能:

public static void CsCompiler() throws IOException, InterruptedException {
Process(path + "\\", " c:\\Windows\\Microsoft.NET\\Framework\\v3.5\\csc /out:program.exe *.cs");
}

public static void Process(String command, String exe) throws IOException, InterruptedException {
final Process p;
if (command != null) {
p = Runtime.getRuntime().exec(exe, null, new File(command));
} else {
p = Runtime.getRuntime().exec(exe);
}

new Thread(new Runnable() {
public void run() {
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;

try {
while ((line = input.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();

p.waitFor();
}

public static void Run(String command) throws IOException, InterruptedException {
String[] argss = {"cmd", "/c", "start", command};

ProcessBuilder pb;

pb = new ProcessBuilder(argss);
pb.start();
}

最佳答案

如果我没猜错的话,你想启动一个程序并获取它的输出,同时从你的 java 方法注入(inject)输入。实际上这非常简单,因为您已经在编译方法中进行了输出获取。
Process 类还具有一个 getOutputStream 方法,您可以使用该方法将输入注入(inject)到流程中。
我将通过示例展示如何执行此操作。
将这个简单的 C 程序视为学生源代码,它接受一个数字作为输入并检查它是偶数还是奇数。

#include <stdio.h>
int main(){
int x;
printf("Enter an Integer Number:\n");
if (( scanf("%d", &x)) == 0){
printf("Error: not an Integer\n");
return 1;
}
if(x % 2 == 0) printf("even\n");
else printf("odd\n");
return 0;
}

现在像这样实现您的 Run 方法来运行应用程序、注入(inject)输入、读取输出并检查返回值。

public static void Run(String command, String input) throws IOException, InterruptedException {
// create process
String[] argss = {"cmd", "/c", command};
ProcessBuilder pb = new ProcessBuilder(argss);
Process process = pb.start();
// create write reader
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
// write input
writer.write(input + "\n");
writer.flush();
// read output
String line = "";
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
// wait for process to finish
int returnValue = process.waitFor();
// close writer reader
reader.close();
writer.close();
System.out.println("Exit with value " + returnValue);
}

就是这样。如果你像这样调用这个方法

Run("NumberChecker.exe", "1");
Run("NumberChecker.exe", "2");
Run("NumberChecker.exe", "a");

您将得到以下输出

Enter an Integer Number:
odd
Exit with value 0
Enter an Integer Number:
even
Exit with value 0
Enter an Integer Number:
Error: not an Integer
Exit with value 1

关于java - 如何使用java在cmd中运行的程序中输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34427138/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com