【问题标题】:Passing data from Java process to a python script将数据从 Java 进程传递到 python 脚本
【发布时间】:2020-01-16 09:54:04
【问题描述】:

我将一个外部 Python 脚本称为 Java 进程,并希望向它发送数据。我创建了一个进程并尝试发送一个字符串。稍后,python 脚本应该等待来自 Java 的新输入,使用这些数据并再次等待(while true 循环)。

Python 代码 (test.py):

input = input("")
print("Data: " + input)

Java 代码:

Process p = Runtime.getRuntime().exec("py ./scripts/test.py");

BufferedWriter out = new BufferedWriter(new
        OutputStreamWriter(p.getOutputStream()));
BufferedReader stdInput = new BufferedReader(new
        InputStreamReader(p.getInputStream()));

System.out.println("Output:");
String s = null;
out.write("testdata");
while ((s = stdInput.readLine()) != null) {
    System.out.println(s);
}

简单打印的过程和输出有效,但不适用于inputBufferedWriter。 是否可以使用 Java 进程将数据发送到这个 python 输入?

我从其他解决方案中读到:

  • 创建一个 Python 监听器并向该脚本发送消息
  • 将外部脚本导入 Jython 并传递数据

这是解决我的问题的更好解决方案吗?

【问题讨论】:

    标签: java python process


    【解决方案1】:

    在java中使用Process类

    什么是进程类? 此类用于启动 .exe 或任何使用 java 的脚本

    它对您有何帮助 创建您的 python 脚本以接受命令行变量并将您的数据从 java 类发送到 python 脚本。

    例如:

            System.out.println("Creating Process"); 
    
            ProcessBuilder builder = new ProcessBuilder("my.py"); 
            Process pro = builder.start(); 
    
            // wait 10 seconds 
            System.out.println("Waiting"); 
            Thread.sleep(10000); 
    
            // kill the process 
            pro.destroy(); 
            System.out.println("Process destroyed"); 
    

    【讨论】:

      【解决方案2】:

      稍后,python 脚本应该等待来自 Java 的新输入

      如果必须在 python 进程仍然是 Java 进程的子进程时发生这种情况,那么您将不得不使用 ProcessBuilder.redirect*( Redirect.INHERIT )ProcessBuilder.inheritIO() 重定向 I/O。像这样:

      Process p = new ProcessBuilder().command( "python.exe", "./scripts/test.py" )
              .inheritIO().start();
      

      如果 python 进程是分开的(我认为这里不是这种情况),那么您将不得不使用某种机制在它们之间进行通信,例如客户端/服务器或共享文件等。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-06
        • 2019-01-28
        • 2011-06-26
        • 1970-01-01
        • 2022-08-24
        • 1970-01-01
        • 2021-03-11
        • 2019-03-11
        相关资源
        最近更新 更多