我编写了执行SQL到DBMS并检索数据的python模块。我试图使用jdbc jar文件而不是本机DB驱动程序。我想知道如何在python中执行jar文件并从jar执行中获取输出。我想知道如何将SQL字符串传递给jar参数。 这是简化的代码。 非常感谢任何帮助。
[java code]
public class GetDBResults {
public static void main(String[] args) {
// return sql results
for(int i=0; i<=100; i++){
// Is this the proper way to generate the output?
System.out.println(i+"/t"+i*100+1);
}
}
}
[python code]
subprocess.call( [ 'java','-jar','./GET_DB_DATA.jar' )
# how to get results from jar execution?
# how to pass SQL string to jar execution?
答案 0 :(得分:14)
您可以通过管道读取输出:
>>> from subprocess import Popen, PIPE, STDOUT
>>> p = Popen(['java', '-jar', './GET_DB_DATA.jar'], stdout=PIPE, stderr=STDOUT)
>>> for line in p.stdout:
print line
关于将字符串传递给stdin,你可以这样做:
>>> p = Popen(['cat'], stdin=PIPE, stdout=PIPE, stderr=STDOUT)
>>> stdout, stderr = p.communicate(input='passed_string')
>>> print stdout
passed_string
答案 1 :(得分:2)
你可以这样做:
with open('output_of_jar.txt','w') as fp :
subprocess.Popen('java -jar ./GET_DB_DATA.jar',stdout=fp).wait()
with open('output_of_jar.txt') as f :
output = f.read()
print output
修改:
stdout = fp 表示命令的输出将写入文件output_of_jar.txt
然后你只需要阅读文件的内容:
with open('output_of_jar.txt') as f :
output = f.read()
print output
答案 2 :(得分:2)
如果您使用的是Linux,则可以使用os.system命令:
os.system("your_java_file > out_put_file")
此命令将执行该文件并将输出打印到out_out_file 然后你可以读取输出文件。