我是靠谱客的博主 复杂嚓茶,最近开发中收集的这篇文章主要介绍Jython:Java如何传值给Python,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

想在Java工程中调用Python脚本,最关键的是python脚本需要使用Java实时传递过来的变量。因此麻烦了,到处找教程。

中文教程为零,还好有Stack Over Flow,输入关键字:jython java passing  variable topython,果真找到一个案例。以下是翻译内容:

我用的是jython2.7.0,想要把java命令行的参数通过jython传递给Python脚本,结果完全不符合预期,代码如下:

String[] arguments ={"arg1", "arg2", "arg3"};
PythonInterpreter.initialize(props,System.getProperties(), arguments);
org.python.util.PythonInterpreterpython = new org.python.util.PythonInterpreter();
StringWriter out = newStringWriter();
python.setOut(out);
python.execfile("myscript.py");
String outputStr =out.toString();
System.out.println(outputStr);

代码运行出现的问题是:传值失败。也就是说没有正确调用接口。


下面是两个回答(未测试):

作者补充回复

String[] arguments ={"myscript.py", "arg1", "arg2","arg3"};
PythonInterpreter.initialize(System.getProperties(),System.getProperties(), arguments);
org.python.util.PythonInterpreterpython = new org.python.util.PythonInterpreter();
StringWriter out = newStringWriter();
python.setOut(out);
python.execfile("myscript.py");
String outputStr =out.toString();
System.out.println(outputStr);

注意第一行,作者是通过arg[0]把脚本传入的。

其他人回复

import org.python.core.Py;
import org.python.core.PyException;
import org.python.core.PyObject;
import org.python.core.PyString;
importorg.python.core.__builtin__;
importorg.python.util.PythonInterpreter;
 
public class JythonTest {
 
    public static void main(String[] args) {
        PythonInterpreter interpreter = newPythonInterpreter();
        String fileUrlPath ="/path/to/script";
        String scriptName ="myscript";
        interpreter.exec("importsysn" + "import os n" + "sys.path.append('" +fileUrlPath + "')n"+ "from "+scriptName+" import *n");
        String funcName ="myFunction";
        PyObject someFunc =interpreter.get(funcName);
        if (someFunc == null) {
            throw new Exception("Could notfind Python function: " + funcName);
        }
       try {
            someFunc.__call__(newPyString(arg1), new PyString(arg2), new PyString(arg3));
        } catch (PyException e) {
            e.printStackTrace();
        }
    }
}

注意对方在directory /path/to/script 目录下建立一个叫做myscript.py 的python脚本:

def myscript(arg1,arg2,arg3):
    print "calling python function withparamters:"
    print arg1
    print arg2
    print arg3

亲测:

importjava.io.IOException;
importorg.python.util.PythonInterpreter; 
 
public class test { 
    public static void main(String[] args) throws IOException {
          int[] arg = {3,6};
         PythonInterpreter.initialize(System.getProperties(),System.getProperties(), new String[0]);
         PythonInterpreter interpreter = new PythonInterpreter(); 
         interpreter.exec("a="+ arg[0]+ "n");
         interpreter.exec("b="+arg[1] + "n");
         interpreter.exec("print b/a");
          // pass the address
         String txt_path = "\python\sample.txt";
         interpreter.exec("txt_path = "" + txt_path + """);
         interpreter.exec("print txt_path");
    }//main
}

参考问答:how to passarguments to python script in java using jython

 


最后

以上就是复杂嚓茶为你收集整理的Jython:Java如何传值给Python的全部内容,希望文章能够帮你解决Jython:Java如何传值给Python所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部