Java 如何在python代码中获得.jar执行的输出?

Java 如何在python代码中获得.jar执行的输出?,java,python,jdbc,jar,subprocess,Java,Python,Jdbc,Jar,Subprocess,我正在编写python模块,该模块将SQL执行到DBMS并检索数据。我正在尝试使用JDBCJAR文件而不是本机DB驱动程序。我想知道如何在python中执行jar文件并从jar执行中获得输出。我想知道如何将SQL字符串传递给jar参数。 下面是简化的代码。 非常感谢您的帮助 [java代码] public class GetDBResults { public static void main(String[] args) { // return sql results

我正在编写python模块,该模块将SQL执行到DBMS并检索数据。我正在尝试使用JDBCJAR文件而不是本机DB驱动程序。我想知道如何在python中执行jar文件并从jar执行中获得输出。我想知道如何将SQL字符串传递给jar参数。 下面是简化的代码。 非常感谢您的帮助

[java代码]

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);
    }
  }
}
你可以做:

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意味着命令的输出将被写入_jar.txt的文件
output\u

然后,您只需使用以下命令读取文件内容:

with open('output_of_jar.txt') as f :
    output = f.read()
print output

如果您使用的是Linux,则可以使用os.system命令:

os.system("your_java_file > out_put_file")
此命令将执行文件并将输出打印到输出文件
然后您可以读取输出文件。

您可以通过管道读取输出:

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

非常感谢。你在一分钟内就回答了。我会试试你的解决方案。我添加了“shell=True”选项,然后你的解决方案运行得很好。谢谢你的快速回答。哇。您的简单代码在mac mountain lion中也能正常工作。它只使用shell命令,而mac OS基于Unix和Linux,因此同样的命令也能正常工作。谢谢您完美的回答。它就像一个符咒。我认为有很多人正在尝试用Python执行jar文件。这将有助于减少他们的尝试和错误。@ovgolovin一旦jar被加载,一个人怎么能连续调用两次而不重新加载它呢?谢谢@Crista23我会通过管道通讯。但接下来需要在java端实现从管道读取。
>>> p = Popen(['cat'], stdin=PIPE, stdout=PIPE, stderr=STDOUT)
>>> stdout, stderr = p.communicate(input='passed_string')
>>> print stdout
passed_string