我正尝试从Java运行命令,以运行Python文件(我也在代码中创建了一个Python文件),并以测试用例文件作为输入并将其重定向到另一个.txt文件。该命令如下所示:
python < testCase1.txt > output.txt file.py
而且我也尝试了绝对路径
python < /home/mateus/IdeaProjects/coyote/testCase1.txt > /home/mateus/IdeaProjects/coyote/output.txt /home/mateus/IdeaProjects/coyote/file.py
我面临的问题是:使用ProcessBuilder运行此命令后,python代码的输出未重定向到output.txt。如果我能从Unix终端正常运行,它的运行效果会很好。
我已经尝试过Runtime.Exec()和ProcessBuilder。我尝试使用process.getInputStream(),但由于该命令未在终端上返回信息,因此无法正常工作。
public boolean runSourceCode() throws IOException {
// creating py file
Files.write( Paths.get(this.nameFile) , this.sourceCode.getBytes());
// Creating the processbuilder
Process p = new ProcessBuilder("python", String.format("< %s > %s %s", "./testCase1.txt", "./output.txt", String.format("./"+this.nameFile)) ).start();
}
编辑1 所以我已经修复了自己,我需要做的是:
// running python
ProcessBuilder p = new ProcessBuilder("python3" , namePyFile);
p.redirectInput(new File( TestFiles.get(i) ) );
p.redirectOutput(new File(saidaFileName));
p.start().waitFor();
在方法签名被签名之后,还需要使用`throws InterruptedException',我们正在使用waitFor()方法,它将等待过程运行。
答案 0 :(得分:-1)
您写道:如果我从Unix终端运行,它可以工作 ProcessBuilder
不是UNIX终端。例如,这就是为什么它具有方法redirectOutput。我认为是一则古老的文章,但仍然有意义:When Runtime.exec() won't。您基本上可以将类Runtime
替换为类ProcessBuilder
。撰写本文时,类ProcessBuilder
不存在。