使用txt测试用例条目运行.py并将输出重定向到另一个.txt

时间:2019-06-16 15:23:14

标签: java processbuilder

我正尝试从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()方法,它将等待过程运行。

1 个答案:

答案 0 :(得分:-1)

您写道:如果我从Unix终端运行,它可以工作 ProcessBuilder不是UNIX终端。例如,这就是为什么它具有方法redirectOutput。我认为是一则古老的文章,但仍然有意义:When Runtime.exec() won't。您基本上可以将类Runtime替换为类ProcessBuilder。撰写本文时,类ProcessBuilder不存在。