Java-ProcessBuilder没有输出我的python文件
一些上下文:我试图在java上创建一个GUI,并在单击GUI上的按钮后运行python代码。例如,如果我在JavaGUI上按start,它将在file.py上运行python代码 为什么它不输出任何东西?您也可以通过创建一个测试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
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);
}
}
}
要记住两件事:
另外,如果有人有更好的方法通过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\"");