使用java文件编译python程序并从文件中读取python程序的输入

时间:2016-02-17 06:14:02

标签: java python

我已将我的python代码存储在文件中,然后输入通过input.txt传递。

    String rollno="13F127";
    String file="add";
    Process p = Runtime.getRuntime().exec("C:\\Python34\\python C:\\Users\\Raga\\Documents\\"+rollno+"\\"+file+".py < C:\\Users\\Raga\\Documents\\"+rollno+"\\input.txt");

当我使用jsp文件运行它时,加载和输出都需要很长时间。请帮我解决一下这个。 我已经使用缓冲和输入读取器读取了这个过程输出。

    stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
    stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));

请帮助我!

1 个答案:

答案 0 :(得分:1)

不要对exec使用重定向(&lt;,&gt;或|)!

重定向由交互式shell(此处为cmd.exe)读取和转换,其中它们从标准输入读取命令。然后shell打开相关文件并使用重定向的标准流调用程序。

exec只做最后一部分,并将< ...input.text作为两个参数传递给Python程序......不处理它们并将它们传递给不处理它们的脚本!所以孩子试着阅读标准输入,并一直在这里等待。

所以你应该:

  • 使用根据Runtime javadoc 的ProcessBuilder现在是启动已修改环境的流程的首选方式
  • 将子流程的输入流重定向到文件

或多或少:

ProcessBuilder pb = new ProcessBuilder("C:\\Python34\\python",
    "C:\\Users\\Raga\\Documents\\"+rollno+"\\"+file+".py");
pb.redirectInput(Redirect.fromFile("C:\\Users\\Raga\\Documents\\"+rollno+"\\input.txt"));
Process p = pb.start();
相关问题