【发布时间】:2021-10-03 11:58:54
【问题描述】:
我想使用 Python 为 Java 类编写测试脚本。我能够使用subprocess、java.util.Scanner 和其他工具编译、运行、提供输入和捕获输出。代码运行,但我没有捕获我希望的运行日志。
问题
现在捕获的输出不包括输入... 我得到(其中 1、2、3、4 是来自文件的输入):
号码?数字?数字?数字?总和:10
我想捕捉:
号码? 1
数字? 2
数字? 3
数字? 4
总和:10
当前代码
Python
import os.path, subprocess
def compile_java(java_file, inputFile):
#setup input file
stdin = get_expected(inputFile)
#compile java
subprocess.check_call(['javac', java_file])
#prep for running
java_class, ext = os.path.splitext(java_file)
cmd = ['java', java_class]
#run java with input, and capturing output
proc = subprocess.run(cmd, input=stdin, check=True, capture_output=True, text=True)
print(proc.stdout)
def get_expected(filename):
content = ""
with open(f'{filename}', 'r') as f:
for line in f.readlines():
content += line
return content
compile_java('Example.java', 'example.in')
Java - Example.java
import java.util.*;
public class Example{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int sum = 0;
for(int i =0; i < 4; i++){
System.out.print("Number? ");
sum = sum + scan.nextInt();
}
System.out.println("Sum: " + sum);
}
}
输入文件 - example.in
1
2
3
4
注意:我想测试 Java 文件,所以我不想以任何方式编辑 Java。我希望有一种方法可以通过更改 Python 代码来捕获这种格式的输出。
【问题讨论】:
-
我正在继续努力……我找到了一个post,用户在其中使用了
p.stdin.write("...")。我喜欢这个想法,但是当我运行代码时,我得到了Exception in thread "main" java.util.NoSuchElementException,我希望我可以用它来逐行提供输入,但仍然很挣扎。
标签: java python subprocess output java.util.scanner