Java-ProcessBuilder没有输出我的python文件

Java-ProcessBuilder没有输出我的python文件,java,file,Java,File,一些上下文:我试图在java上创建一个GUI,并在单击GUI上的按钮后运行python代码。例如,如果我在JavaGUI上按start,它将在file.py上运行python代码 为什么它不输出任何东西?您也可以通过创建一个测试python文件并在下面的代码中输入您自己的文件位置来尝试这一点 迄今为止的代码: import java.io.BufferedReader; import java.io.InputStreamReader; import javax.swing.JFrame; p

一些上下文:我试图在java上创建一个GUI,并在单击GUI上的按钮后运行python代码。例如,如果我在JavaGUI上按start,它将在file.py上运行python代码

为什么它不输出任何东西?您也可以通过创建一个测试python文件并在下面的代码中输入您自己的文件位置来尝试这一点

迄今为止的代码:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import javax.swing.JFrame;

public class main_gui extends JFrame {
     public static void main(String[] args) throws Exception {

        ProcessBuilder builder = new ProcessBuilder("cmd.exe",
                "cd \"G:\\...Javaa\\filetranslatorapplication\\file_translator_app.py");
        builder.redirectErrorStream(true);
        Process p = builder.start();
        BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line;
        while (true) {
            line = r.readLine();
            if (line == null) {
                break;
            }
            System.out.println(line);
        }
    }
}
要记住两件事:

  • 中的python文件与此java文件不在同一位置
  • java文件和python文件都在usb上,因此是“G:\…”
    另外,如果有人有更好的方法通过java gui运行python代码,请随时为我指出正确的方向。

    您的过程根本没有意义

    它只是将
    cmd
    cd
    生成到一个无效目录(因为它是一个文件)

    你想要的可能是

    cmd /c python g:\your\path\foo.py
    

    或者干脆

    may\be\full\path\is\needed\python g:\your\path\foo.py
    
    因此,您的代码应该如下所示:

    ProcessBuilder builder 
        = new ProcessBuilder("cmd.exe", "/c", "python", "g:\\yourpath\\file_translator_app.py");
    // or 
    // = new ProcessBuilder("python", "g:\\yourpath\\file_translator_app.py");
    // or 
    // = new ProcessBuilder("cmd", "/c", "g:\\yourpath\\file_translator_app.py");
    

    以下内容适用于您:

        ProcessBuilder builder = new ProcessBuilder("cmd",
                "/c \"G: && python Javaa\\filetranslatorapplication\\file_translator_app.py\"");
    

    当我从不同的驱动器运行Java应用程序时,就会执行这个命令。但是,对于您来说,如果是同一个驱动器,则无需切换到
    G:
    。您可以使用
    python
    命令执行py文件。

    为什么不试试jython?它曾经工作过一次,但之后就不再工作了。你试过多次运行它吗?它怎么能只运行一次呢!:D您可以检查流程的输出。文件上有锁吗?嗯,是的,看起来确实很奇怪,我可能得在这方面做一些调试。谢谢你的解决方案!你知道如何在pycharm上使用jython吗?我已经下载并安装了jython。这种方法有很多问题。1.如果您希望将当前工作目录设置为
    g:
    ,那么除了执行奇怪的
    g:&&command
    之外,ProcessBuilder中还有更好的方法。2.
    python
    应该接受脚本位置的完整路径(包括
    g:\…
    ),因此不需要执行奇怪的
    g:&&command
    3。如果命令有多个参数,只需将其拆分为单独的参数即可
    ProcessBuilder
    。您不需要将looong字符串(并引用)作为单个参数。
        ProcessBuilder builder = new ProcessBuilder("cmd",
                "/c \"G: && python Javaa\\filetranslatorapplication\\file_translator_app.py\"");