【问题标题】:Communicate with Java program from Python从 Python 与 Java 程序通信
【发布时间】:2012-03-23 05:31:30
【问题描述】:

我的 Python 程序是“check.py”

import os.path,subprocess
from subprocess import STDOUT,PIPE

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]
    proc = subprocess.Popen(cmd,stdout=PIPE,stdin-PIPE,stderr=STDOUT)
    stdout,stderr = proc.communicate("viraj")
    print stdout

我的 Java 程序是“Test.java”

import java.util.*;
class Test
{
    public static void main(String args[])
    {
        System.out.println("Tested Successfully");
        Scanner t=new Scanner(System.in);
        System.out.println("Enter the string");
        String str=t.nextLine();
            System.out.println("Hello "+str);
       }
}

在这里,在check.py 中,我将参数viraj 作为proc.communicate("viraj") 传递,因此我的输出是

测试成功
输入字符串
你好 viraj

但是,我不想传递参数。相反,我希望输出为

测试成功
输入字符串

然后在我将字符串输入为viraj 后,它应该打印为Hello viraj 我该怎么做?

【问题讨论】:

    标签: java python subprocess pipe communicate


    【解决方案1】:

    要与 java 程序交互,只需不带参数调用 communicate()

    def execute_java(java_file):
        java_class,ext = os.path.splitext(java_file)
        cmd = ['java', java_class]
        proc = subprocess.Popen(cmd)
        proc.communicate()
    

    【讨论】:

    • 我也试过这个解决方案..但是输出是“测试成功输入字符串”然后“java.util.noSuchElementException: No line found”来了..
    • 糟糕,从对 subprocess.Popen 的调用中删除 stdin = PIPE
    猜你喜欢
    • 2014-04-26
    • 1970-01-01
    • 2011-04-06
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多