2013-04-25 50 views
0

閱讀是System.out.print Java的我正在運行,需要不確定性用戶輸入一個Java類的Python腳本:通過Python子

import sys 
import subprocess 
from subprocess import Popen, PIPE 

p = Popen("java myclass", shell=True, stdout=subprocess.PIPE) 

while True: 
    inline = p.stdout.readline() 
    if not inline: 
     break 

sys.stdout.write(inline) 
sys.stdout.flush() 

當使用System.out.print()顯示輸出,正確顯示輸出。但是,用System.out.print()打印用戶輸入提示時,不會顯示輸出。我試着將p.stdout.readline()切換到p.stdout.read(),但是沒有輸出顯示。有沒有辦法顯示沒有回車的輸入提示?

EDIT

例如,如果Java類包含下列:

System.out.println("Message 1); 
System.out.println("Message 2); 
System.out.print("Enter a number:") 

運行純Java代碼將顯示所有的3行。

通過Python的運行將僅顯示以下的代碼:

Message 1 
Message 2 
+0

可以使用'strip'以除去回車:'直列= p.stdout.readline()條() ' – 2013-04-25 20:26:54

+0

我很困惑。所有System.out打印都是通過STDOUT完成的,所以閱讀它應該沒有什麼不同。但是,System.in正在從STDIN讀取數據,因此您必須使用適當的鍵組合鍵寫出「用戶輸入」以指示輸入已停止。 – CodeChimp 2013-04-25 20:28:18

回答

2
p1 = subprocess.Popen(["/usr/bin/java", "MyClass"], stdout=subprocess.PIPE) 
print p1.stdout.read() 
+0

謝謝,我能夠使用這個獲得提示: – 2013-04-25 20:56:07