2017-05-04 8 views
0

Je suis en train de se connecter à python BigSQL.I ont un code java qui peut se connecter à python BigSQL & récupérer des données à partir BigSQL.Below est mon exemple de codeConnect BigSQL en utilisant Python par 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(); 
    } 
    } 

} 

j'ai écrit un code python pour appeler ce code java en utilisant mon 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") 

mon code python est en cours d'exécution avec succès, mais je ne suis pas en mesure de récupérer la sortie java mentionné dans

System.out.println(com_name+":"+family+":"+sci_name+":"+symbol+":"+synonym); 

Pourriez-vous m'aider s'il vous plaît?

Merci à l'avance

+0

Pourquoi vous exécutez le code Java de python? Pouvez-vous utiliser Jython ou bash à la place? –

+0

En fait, selon mon projet, je dois utiliser uniquement python –

+0

'execute_java' ne fait rien ... vous devriez y ajouter subprocess.check_call. –

Répondre

0

Vous devez exécuter l'appel à Java et utiliser check_output pour obtenir la sortie java. check_call retourne juste la returnCode:

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") 

Les retours:

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

Merci @Maurice Meyer En utilisant check_output, je reçois la sortie >> b '' pour le code java mentionné dans le post le plus haut Mais j'attends 10 lignes de sortie au format com_name + ":" + family + ":" + sci_name + " : "+ symbole +": "+ synonyme. Une idée de pourquoi ça se passe? Lorsque je lance le code Java en utilisant l'invite de commande avec la commande java, j'obtiens 10 lignes de sortie avec nom_com + ":" + famille + ":" + nom_sci + ":" + symbole + ":" + synonyme format –

+0

: 'System.out.println (" Hello World! ");' Et l'a exécuté à partir de la console. Vous pouvez essayer shell = True et imprimer stderr comme défini dans [docs] (https://docs.python.org/2/library/subprocess.html?highlight=check_output#subprocess.check_output) –

+0

Merci @Maurice Meyer. Ça m'a aidé –