2015-03-03 70 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