簡體   English   中英

從python到stdin java的stdout

[英]stdout from python to stdin java

我在python中有從python到stdin的標准輸出。

我在用

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仍在阻塞,因為它沒有顯示任何內容

蟒蛇:

 p.stdin.write("haha") 

Java的:

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

Java掃描器文檔

默認情況下,掃描儀使用空格分隔令牌。 (空格字符包括空格,制表符和行終止符。

您的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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM