java - 使用python与java程序交互

标签 java python django linux subprocess

Possible Duplicate:
Calling Java app with “subprocess” from Python and reading the Java app output

基本上我正在寻找的是,我想在使用 python 运行时与 java 程序进行交互,这样我就可以访问它的输出并将输入传递给它。 我已经成功使用 python 运行 Java 程序。我想知道我可以在 python 程序中访问 java 程序的输出吗? 例如。 在java程序中:System.out.println("请输入编号。"); 在 python 中,我应该能够将“Enter no”作为字符串获取,并将值从 python.a 传递给 java 程序

我设法做到了直到没有: Python程序:

import sys
import os.path,subprocess

def compile_java(java_file):
    subprocess.check_call(['javac', java_file])

def execute_java(java_file):
    java_class,ext = os.path.splitext(java_file)
    cmd = ['java', java_class]
    subprocess.call(cmd, shell=False)            

def run_java(java_file):
    compile_java(java_file)
    execute_java(java_file)

Java 程序:

import java.io.*;
import java.util.*;
class Hi
{
        public static void main(String args[])throws IOException
        {
        Scanner t=new Scanner(System.in);

        System.out.println("Enter any integer");
        int str1=t.nextInt();           
        System.out.println("You entered"+str1);     

        }
}

谢谢:)

最佳答案

如果您需要的只是从 Java 程序的非交互式执行中获取输出,请使用 subprocess.check_output 而不是 subprocess.call。

http://docs.python.org/library/subprocess.html

您需要 Python 2.7 或更高版本才能使用 check_output。

如果您需要与 Java 程序交互,可以使用 Popen.communicate 来实现,您可以在其中读取进程的输出并使用文件描述符将内容发送到其输入。

您还可以使用 pexpect python 库来自动化这种交互,pexpect 抽象了使用 Popen.communicate 涉及的大量跑腿工作。

请注意,这些技术适用于您需要 Python 程序与之交互的任何类型的可执行文件,而不仅仅是 Java;只要它使用 stdin 和 stdout,使用这些调用就应该适合您。

关于java - 使用python与java程序交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9352508/

相关文章:

java - 如何在azure函数中使用rss文件

python - mac osx雪豹中的pyqt安装问题

python - 异常值: cannot import name TimeoutStateError when import Geocoder

django - 如何使用 ModelForm 替换图像?

java - 如何用 Java 发送电子邮件?

java - 无法访问 openapi-generator-cli.jar 文件

java - SOAPMessage GZIP 实现

python - 像plotly.express 中一样使用plotly.graph_objs 创建直方图

python - 合并以相同字母开头的 pandas DataFrame 列

python - 在 Django-rest-framework 中编写一个可以访问 validatated_data 的验证器类