【问题标题】:How to interact with Java from Python如何从 Python 与 Java 交互
【发布时间】:2013-02-13 04:27:21
【问题描述】:

我目前使用 Matlab 作为一种科学计算语言,但有兴趣转向更开放的替代方案。 Python (+scipy +numpy +matplotlib) 似乎是最好的方法。我对这种切换的最大担忧是 Python 不会像 Matlab 那样与 Java 交互好/容易/无缝,而且我经常需要使用 Java API。我特别喜欢 Matlab 中的那个:

1) 我可以实例化 Java 对象并访问它们的成员变量和方法

2) Java 事件在 Matlab 中变成“回调”

3) Java 类型自动转换为 Matlab 类型(布尔到逻辑等)

据我所知,Python 中有 3 个选项(如下)。我担心的是,每一个都是由一个非常小的开发人员社区支持/开发的(据我了解,每种情况下都有 1-3 人),并且这种支持可能不会永远存在。以下哪项是 Matlab 所做的两件事?在可预见的未来,哪个最有可能继续这样做?如果我也可以使用 Python 中的 Java GUI,那将是一个额外的好处。我错过了任何选项吗?

1) Jython

2) Py4J

3) JPype

【问题讨论】:

  • 据我所知,Jython 支持这些要求,但我在该主题方面没有太多经验。
  • 请问您为什么要这样做?是因为您有用 java 编写的遗留库代码吗?从长远来看,最好将所有代码都放在 python(或与它很好接口的 C)中,而不是 python/java 混合。使用 matlab 后,我明白为什么您要为某些任务调用非 matlab 代码(鉴于 matlab 对于通用编程来说是可怕的),但如果您使用 python 就不会遇到这个问题
  • PS:Jython 不起作用。检查此常见问题解答:scipy.github.com/faq.html#id23 通常,用 Jython 编写的程序无法访问为 CPython 编写的 C 扩展。鉴于大多数(如果不是全部)python 科学库的核心功能都是用 C 编写的,那么这不会那么好
  • 谢谢,我也不清楚。我想我对 Jython 的问题是它似乎总是落后于 Python 并且不一定完全兼容。这是一个合理的担忧吗?
  • 这是我想使用的 Java API(以及一些相关的遗留代码)。

标签: java python api matlab jython


【解决方案1】:

我认为没有一种简单的方法可以做到这一点,因为 SciPy 和朋友目前不在 Jython 上运行。您可以将事物作为客户端服务器或作为具有重定向标准输入/输出/错误的子进程运行。

我还在我的一个 Python 项目中玩弄了 XML-RPC,我有一个可用的 blurb from the docs 可能会有所帮助。走这条路你不会得到世界上最好的性能,但它确实具有相当容易上手的优点。

【讨论】:

    猜你喜欢
    • 2011-01-16
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 2016-11-15
    • 1970-01-01
    • 2011-01-28
    • 2012-02-18
    相关资源
    最近更新 更多