2015-03-03 72 views
0

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

我使用

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文件--->它块作为标准输入是仍然阻塞,因为它显示没有内容

+2

你有什么问题? – 2015-03-03 02:27:38

+0

@MalikBrahimi代码不会打印p.stdout.read()也许我应该修改以更好地展示它 – aceminer 2015-03-03 02:29:36

+1

这可能有所帮助:http://stackoverflow.com/questions/163542/python-how-do-i- pass-a-string-into-subprocess-popen-using-stdin-argument基本上,使用p.communicate()而不是p.stdin.write。 – matiasg 2015-03-03 02:55:43

回答

1

蟒蛇:

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