0

これがjythonのバグなのか、jython2.5.2でJavaパッケージ/クラスをインポートする際の微妙な違いについての誤解なのかはわかりません。

Javaからjythonスクリプトを実行するjythonクラスがあります。これらのスクリプトの1つは、メールを送信するだけです。

jythonスクリプトコードのスニペット:

from javax.mail import *
from javax.mail.internet import *
from java.util import Properties

props = Properties()
props.put("mail.smtp.host", "path.mydomain.com")
session = Session.getInstance(props,None) # Session can't be resolved

そのため、javax.mail.SessionにあるSessionを解決しようとすると例外が発生し、「from javax.mailimport*ステートメント」でカバーする必要があります。

jythonを実行するJavaクラスは、次のようになります。

static {
    PythonInterpreter.initialize(System.getProperties(), new Properties(), new String[0]);
}

void run(String scriptPath){
    String script; 
    // script is read into this string here from path

    PythonInterpreter python = new PythonInterpreter(null, new PySystemState());
    try (
        python.exec(script);
    ) catch (PyException pyEx){
        // catch
    }
}

奇妙なことに、明示的なインポートを使用して別のjythonスクリプトを実行すると、次のようになります。

from javax.mail import Session

その後は正常に機能しますが、前のスクリプトからセッションを解決することもできるようになります。

Mavenリポジトリバージョン2.5.2のorg.pythonのjython-standaloneを使用しています。このコードは2.1では問題なく機能しているようです。「import*」を使用すると、最初はラッパーの作成に失敗する可能性がありますか?

(パフォーマンス上の理由から明示的にインポートする必要があることはわかっていますが、このソフトウェアは他の人のスクリプトを実行するため、当面は機能させるようにしています。)

4

1 に答える 1

1

多くの検索の後、この動作は実際にはバグであることがわかりました。

http://bugs.jython.org/issue1383

于 2012-03-02T22:46:51.717 に答える