40

PythonアプリとJavaアプリがあります。Python アプリは、Java アプリの入力を生成し、コマンド ラインで呼び出します。

これにはもっとエレガントな解決策があるはずです。JNI を使用して Java から C コードを呼び出すのと同じです。

ポインタはありますか?(参考までに、私はPythonが初めてです)

明確化(長い質問を犠牲にして: 謝罪) py アプリ (私は所有していません) は、多数の構成ファイルの形式でユーザー入力を受け取ります。次に、これらを解釈し、ファームはプラグイン メカニズムを介して多数の (隠された) ツールに働きかけます。レガシー Java アプリが提供する機能のサポートを追加したいと考えています。

そのため、Java アプリから Python アプリを呼び出す意味がなく、jython 環境 (JVM 上) で py アプリを実行することはできません。

これには明確なメカニズムがないため、単純な CL 呼び出しが最善の解決策だと思います。

4

6 に答える 6

68

スレッドを復活させて申し訳ありませんが、受け入れられた回答はありませんでした...

Py4Jを使用することもできます。フロントページと多くのドキュメントに例がありますが、基本的には、Python メソッドであるかのように、Python コードから Java メソッドを呼び出すだけです。

>>> from py4j.java_gateway import JavaGateway
>>> gateway = JavaGateway()                        # connect to the JVM
>>> java_object = gateway.jvm.mypackage.MyClass()  # invoke constructor
>>> other_object = java_object.doThat()
>>> other_object.doThis(1,'abc')
>>> gateway.jvm.java.lang.System.out.println('Hello World!') # call a static method

Jython とは対照的に、Py4J は Python VM で実行されるため、常に最新バージョンの Python で「最新」であり、Jython では適切に実行されないライブラリ (lxml など) を使用できます。通信は、JNI ではなくソケットを介して行われます。

免責事項: 私は Py4J の作成者です

于 2010-09-25T10:51:57.410 に答える
11

Jythonを見てください。これは JNI に似ていますが、C を Python に置き換えます。つまり、Java から Python を呼び出すことができ、その逆も可能です。あなたが何をしようとしているのか、または現在のアプローチがあなたの望むものではない理由が完全には明らかではありません。

于 2009-01-25T00:46:46.043 に答える
6

Java コードをコンテナ (サーブレット / EJB) にラップします。

したがって、vm-startup で時間を無駄にすることはなく、よりサービス指向に進むことができます。

ラッピングにはjythonを使用できます(pythonに精通している場合にのみ意味があります

Python と Java が使用できる通信プロトコルを選択します。

  • json (www.json.org を参照)
  • rmi (Python: JPype)
  • 休み
  • ソープ(勇者専用)

あなたやあなたのパートナーがよく知っているものを選んでください!

于 2009-01-25T10:50:46.837 に答える
5

Java アプリを Python プロセスに組み込みたい場合は、JPypeをご覧ください。JNI を介して Java へのアクセスを提供します。

于 2009-02-04T12:18:07.250 に答える
4

swig: http://www.swig.org/Doc1.3/Java.htmlを使用するのはどうですか?

于 2009-02-04T12:38:23.030 に答える
2

JCC を試してみてくださいhttp://pypi.python.org/pypi/JCC/2.1

JCC は、CPython から直接 Java を呼び出すためのコード ジェネレーターです。OS X、Linux、Solaris、および Windows で CPython 2.3+、いくつかの JRE (Sun JDK 1.4+、Apple JRE 1.4+、および OpenJDK 1.7) をサポートします。これは Open Source Application Foundation (OSAF、Chandler を作成している人々) によって作成され、Apache スタイルのライセンスの下でリリースされています。

パッケージの説明から:

JCC は、Java の Native Invocation Interface (JNI) を介して CPython から Java クラスを呼び出すために必要なグルー コードを生成するための C++ コード ジェネレーターです。

JCC は、Java メモリとオブジェクト参照管理だけでなく、JNI アクセスのすべての厄介な詳細を隠す C++ ラッパー クラスを生成します。

JCC は、Python インタープリターからこれらの C++ クラスにアクセスできるようにする CPython 型を生成します。JCC は、反復子とプロパティ アクセサーを検出することにより、これらの Python 型を pythonic にしようとします。イテレータとマッピングも JCC に宣言できます。

于 2009-02-04T12:54:28.190 に答える