2012-03-05 50 views
-2

我的Python編程'是 「check.py」溝通與Java程序在Python

import os.path,subprocess 
from subprocess import STDOUT,PIPE 

def compile_java(java_file): 
    subprocess.check_call(['javac', java_file]) 

def execute_java(java_file): 
    java_class,ext = os.path.splitext(java_file) 
    cmd = ['java', java_class] 
    proc = subprocess.Popen(cmd,stdout=PIPE,stdin-PIPE,stderr=STDOUT) 
    stdout,stderr = proc.communicate("viraj") 
    print stdout 

我的Java程序是 「Test.java」

import java.util.*; 
class Test 
{ 
    public static void main(String args[]) 
    { 
     System.out.println("Tested Successfully"); 
     Scanner t=new Scanner(System.in); 
     System.out.println("Enter the string"); 
     String str=t.nextLine(); 
      System.out.println("Hello "+str); 
     } 
} 

在這裏,check.py,我傳遞一個參數virajproc.communicate("viraj"),因此我的輸出是

測試成功
輸入字符串
你好的Viraj

不過,我不希望傳遞參數。相反,我想輸出作爲

測試成功
輸入字符串

,然後後,我輸入的字符串作爲viraj,它應該得到打印爲Hello viraj 我怎樣才能做到這一點?

回答

2

要與java程序進行交互,只需調用communicate()而不帶任何參數。

def execute_java(java_file): 
    java_class,ext = os.path.splitext(java_file) 
    cmd = ['java', java_class] 
    proc = subprocess.Popen(cmd) 
    proc.communicate() 
+0

我自己也嘗試這種解決方案。但輸出「測試成功輸入字符串」,然後選擇「java.util.noSuchElementException:沒有找到行」來了.. – 2012-03-06 01:37:43

+0

哎呀,刪除'標準輸入= PIPE'從調用到'subprocess.Popen'。 – unutbu 2012-03-06 02:31:38