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

Posted

技术标签:

【中文标题】如何在 python 代码中获取 .jar 执行的输出?【英文标题】:How to get the output from .jar execution in python codes? 【发布时间】:2014-02-25 22:27:24 【问题描述】:

我正在编写 python 模块,该模块执行 SQL 到 DBMS 并检索数据。我正在尝试使用 jdbc jar 文件而不是本机 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);
    
  

[python代码]

subprocess.call( [ 'java','-jar','./GET_DB_DATA.jar' )

# how to get results from jar execution?
# how to pass SQL string to jar execution?

【问题讨论】:

【参考方案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 表示命令的输出将写入文件output_of_jar.txt

然后你只需要读取文件的内容:

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

【讨论】:

谢谢。你只用了一分钟就回答了。我会试试你的解决方案。 我添加了“shell=True”选项,然后您的解决方案运行良好。【参考方案2】:

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

os.system("your_java_file > out_put_file")

此命令将执行文件并将输出打印到 out_out_file 然后就可以读取输出文件了。

【讨论】:

感谢您的快速答复。 哇。您的简单代码也适用于 mac mountain lion。 它只是使用shell命令,而mac OS是基于Unix和Linux的,所以同样的命令可以工作。【参考方案3】:

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

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

关于将字符串传递给标准输入,可以这样实现:

>>> p = Popen(['cat'], stdin=PIPE, stdout=PIPE, stderr=STDOUT)
>>> stdout, stderr = p.communicate(input='passed_string')
>>> print stdout
passed_string

【讨论】:

感谢您的完美回答。它就像一个魅力。我认为有很多人试图在 Python 中执行 jar 文件。这将有助于减少他们的试验和错误。 @ovgolovin 如何在不重新加载 jar 的情况下进行两次连续调用?谢谢! @Crista23 我会通过管道通信来做到这一点。但随后需要在 java 端实现从管道读取。

以上是关于如何在 python 代码中获取 .jar 执行的输出?的主要内容,如果未能解决你的问题,请参考以下文章

如何在python脚本中执行java 命令

如何获取当前执行的 jar 文件所在的目录? [复制]

JAVA如何在main()中取得当前jar的名字和路径?

如何在java中获取执行目录路径[重复]

在控制台上执行的 python/c++/.jar 程序中插入分页符或换页符

JPS工具如何获取正在执行的主类或jar的名称