1

Pythonパッケージからjarファイルを作りたいです。私はmavenでjython-compile-maven-pluginを使用しています。トリッキーな部分は、引数の処理のようです。受信側の python パッケージは、python 側で正常に動作する optparse を使用していますが、Java / jython を介してパラメーターを提供するのは困難です。

引数の欠落に関するエラーが発生しました。今、引数を main() に提供しようとしましたが、何も期待していません。

これは私が瓶に呼び出す方法です:

java -jar target/metrics-0.2.0-jar-with-dependencies.jar -f sample.txt --format csv -q

Java started
5 Arguments: -f, sample.txt, --format, csv, -q, 
Exception in thread "main" javax.script.ScriptException: TypeError: main() takes no arguments (1 given) in <script> at line number 1

引数を適切に提供する方法についてのアイデアはありますか?

ここに私のInitJython.javaがあります:

package org.testingsoftware.metrics;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

import org.apache.commons.lang.StringUtils;

public class InitJython {

    public static void main(String[] args) throws ScriptException {
        System.out.println("Java started");
        System.out.print(args.length + " Arguments: ");
        for (String s : args) {
            System.out.print(s);
            System.out.print(", ");
        }
        System.out.println();
        ScriptEngine engine = new ScriptEngineManager().getEngineByName("python");

        // c.exec("try:\n  from metrics.metrics import main\n  main()\nexcept SystemExit:\n  pass");
        engine.eval("from metrics.metrics import main");
        engine.eval("main('" + StringUtils.join(args, " ") + "')");
        System.out.println("Java exiting");
    }

    public void run() throws ScriptException {
    }
}
4

1 に答える 1

0

この行、

engine.eval("main('" + StringUtils.join(args, " ") + "')");

に評価されます

engine.eval("main('-f sample.txt --format csv -q')");

これは、main()Python 関数が 1 つの引数を受け取ることを意味します (エラー メッセージに示されているように、"1 given")。

それを機能させるには、main()次のようなを使用できます。

def main(arg):
    # Split 'arg' to get the arguments that were given to InitJython 
    # on the command line as a list of strings
    args = arg.split()

    parser = OptionParser()
    parser.add_option("-f", dest="filename",
                      help="read from FILENAME")
    ...
    ...

    (opts, args) = parser.parse_args(args)
于 2013-08-14T15:48:01.383 に答える