2017-05-04 57 views
0
使用Python

我試圖連接蟒蛇BigSQL.I有一個Java代碼,可以連接蟒蛇BigSQL &檢索BigSQL.Below數據是我的示例代碼連接BigSQL通過Java

public class Hello { 

    public static void main(String[] args) { 
    try(Connection con = DriverManager.getConnection("connection details")) { 

Class.forName("com.ibm.db2.jcc.DB2Driver"); 
    Statement stmt = con.createStatement(); 
    System.out.println("Connected to BigSQL");  
    ResultSet result = stmt.executeQuery("select * from table limit 10"); 
    while (result.next()) { 
     //Retrieve by com_name 
     String com_name = result.getString(1); 
     //Retrieve by family 
     String family = result.getString(2); 
     //Retrieve by sci_name 
     String sci_name = result.getString(3); 
     //Retrieve by symbol 
     String symbol = result.getString(4); 
     //Retrieve by synonym 
     String synonym = result.getString(5); 
    System.out.println(com_name+":"+family+":"+sci_name+":"+symbol+":"+synonym); 
    } 

    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (ClassNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    } 

} 

我寫的一個Python代碼中使用我的Python

import os 
import os.path,subprocess 
from subprocess import STDOUT,PIPE 
path='Location where my .java file is' 
os.chdir(path) 
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] 

compile_java('Hello.java')  
execute_java("Hello") 

我的Python代碼成功運行調用這個Java代碼,但我無法檢索

提到的java的輸出

你能幫我嗎?

由於提前

+0

你爲什麼從蟒蛇執行Java代碼?你可以使用Jython或bash嗎? –

+0

實際上,根據我的項目要求,我只能使用python –

+0

'execute_java'什麼也不做......你應該在那裏添加subprocess.check_call。 –

回答

0

您需要執行調用java和使用check_output獲取Java輸出。 check_call剛剛返回的返回碼:

def execute_java(java_file): 
    java_class,ext = os.path.splitext(java_file) 
    cmd = ['java', java_class] 
    print(cmd) 
    javaStdout =subprocess.check_output(['java', java_class]) 
    print ('>>', javaStdout) 

execute_java("HelloWorld") 

的回報:

['java', 'HelloWorld'] 
>> b'Hello World!\n' 
+0

謝謝@Maurice Meyer使用check_output,我得到輸出>> b''爲最上面的帖子中提到的java代碼但是我期待10行輸出格式爲com_name +「:」+ family +「:」+ sci_name +「 : 「+符號+」:「+代名詞。任何想法爲什麼發生?當我用java命令使用命令提示符運行java代碼時,我用com_name +「:」+ family +「:」+ sci_name +「:」+ symbol +「:」+同義詞格式獲得了10行輸出 –

+0

我正在使用:'System.out.println(「Hello World!」);'並從控制檯運行它。你可以嘗試shell = True並打印出[docs]中定義的stderr(https://docs.python.org/2/library/subprocess.html?highlight=check_output#subprocess.check_output) –

+0

Thanks @Maurice Meyer。它有幫助 –