stdout从python到stdin java

时间:2015-03-03 02:26:42

标签: java python console

我在java中有一个从python到stdin的stdout。

我正在使用

Python代码

p = subprocess.Popen(command, stdout = subprocess.PIPE, stdin = subprocess.PIPE)
p.stdin.write("haha")
print "i am done" #it will never hit here

Java代码

Scanner in = new Scanner(System.in)
data = in.next()// the code blocks here

基本上会发生什么 子进程运行jar文件--->因为stdin仍然没有阻止,所以它会阻塞,因为它没有显示内容

1 个答案:

答案 0 :(得分:2)

  

python:

p.stdin.write("haha")
     

的java:

Scanner in = new Scanner(System.in)
data = in.next()

来自Java Scanner docs

  

默认情况下,扫描程序使用空格分隔令牌。 (白色   空格字符包括空格,制表符和行终止符。

您的python代码不会写入任何扫描程序识别为标记结尾的内容,因此扫描程序会在那里等待读取更多数据。换句话说,next()读取输入直到遇到空白字符,然后返回读入的数据,减去终止空格。

这个python代码:

import subprocess

p = subprocess.Popen(
    [
        'java',  
        '-cp',
        '/Users/7stud/java_programs/myjar.jar',
        'MyProg'
    ],
    stdout = subprocess.PIPE, 
    stdin = subprocess.PIPE,
)


p.stdin.write("haha\n")
print "i am done" 
print p.stdout.readline().rstrip()

...使用这个java代码:

public class MyProg {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String data = in.next();

        System.out.println("Java program received: " + data);
    }
}

...产生这个输出:

i am done
Java program received: haha