【发布时间】:2016-12-14 19:03:08
【问题描述】:
我正在编写一个 Python 脚本来对大约 300 个使用 Scanner(System.in) 输入的作业进行评分
我认为我可以做的事情就像打电话一样简单:
os.system("cat input.txt | java {} > program_output.txt".format(class_file))
我也试过
os.system("java {} < input.txt > program_output.txt".format(class_file))
但是,在某些作业中,即使在手动输入输入时它工作得很好,但当它从这个 input.txt 文件中获取输入时,程序却给了我一个错误:
Exception in thread "main" java.util.NoSuchElementException: No line found
这是在之前两次调用 console.next() 之后,错误发生在调用 console.nextLine() 时
我不知道为什么会这样,但是修改每个人的代码并不是很简单,所以我想知道是否有一种方法可以使用 python 来模拟输入的实际类型,而不是重定向 stdin。谢谢!
编辑:为了记录,Java 程序不能接受来自标准输入的管道的原因是因为程序创建了多个扫描仪,而不是绕过扫描仪。
【问题讨论】:
-
不要放弃重定向标准输入。这绝对是最好的方法。
-
看看Jython,是python的java实现,可以原生导入java类。
-
您是否尝试过使用子进程执行相同的操作?
-
@themistoklik 我尝试在 shell 中逐字输入该命令,但它给出了我的错误。
-
@JohnKugelman 你如何建议我改变我正在做的事情?
标签: java python linux unix stdin