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

标签 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()));

请帮我解决这个问题!

最佳答案

不要在 exec 中使用重定向(<、> 或 |)!

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

exec只是完成最后一部分,并通过 < ...input.text作为 Python 程序的两个参数...不处理它们,并将它们传递给也不处理它​​们的脚本!所以 child 尝试读取标准输入,并一直在这里等待。

所以你应该:

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

或多或少:

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();

关于java - 使用java文件编译python程序并从文件中读取python程序的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35449205/

相关文章:

python - Pandas - 将行中的值设置为自身乘以另一个值

java - 放心 : How to make the POST rest assure call abstract for different type of Request objects

java - 如何使用 GridBagLayout 和 GridLayout 实现最佳对齐?

java.lang.Number 没有实现 "+"或任何其他运算符?

java - 将类注入(inject) JVM 并与现有类交互

python - os.exec* 的第一个参数

python - 使用 django 自定义管理器方法作为 Q 对象链的一部分

python - PySpark 应用程序失败,出现 java.lang.OutOfMemoryError : Java heap space

java - 用PDFBox写图片到pdf,发现左上角有一些奇怪的像素

python - 设置一种特定的日期类型以在 genfromtxt 中读取