From: Adam B. <ada...@gm...> - 2018-08-11 21:56:03
|
Hi Deb On top of that, depending on how the script you’re calling is written, it might be useful to call one layer down instead of using I/O. Jython lets you work with python objects fairly directly from Java, and call Python functions directly as well. So if your python script has internal functions and classes, you could call straight into them. YMMV. Adam > 在 2018年8月12日,上午7:41,Jeff Allen <ja...@fa...> 写道: > > I don't know anything about Spring Boot, but the standalone JAR must be on your path for you to be able to refer to "PythonInterpreter" in your code. So by "not detected" I guess you mean that Jython appear not to find its library (which is in the standalone JAR). Jython guesses based on the path to the JAR it seems to be running from (that org.python.core.Py was loaded from) but telling it is safer. > > This bit struck me as odd: > > props.put("python.home", "C:\\Dev\\Python27"); > > That's not the location of CPython is it? That would cause you a world of confusion. > > However, none of that addresses your question about argv (meaning sys.argv I suppose). The important observation here is that "PythonInterpreter.initialize" is a static method that sets a default argv that all interpreters will see as they are created. It makes a big difference now what version you are using. In 2.7.0, all interpreters were really the same interpreter: you got a separate namespace for your main, but the modules where all the same, in particular every interpreter shared sys. In 2.7.1, each interpreter gets its own sys, and so each module used is loaded again for each interpreter. > > I cannot say off the top of my head what the behaviour of the default argv and sys.argv is, but I'm pretty sure the interpreter you make in the next line has its own sys and the sys.argv you could set independently, although not in the constructor. > > Jeff Allen > >> On 11/08/2018 20:16, Debashish wrote: >> Hi, >> >> I am trying to call a Python Script from a Spring Boot applications. There are two issues I am facing: >> (1) The Jython Standalone JAR is not detected and I am forced to supply the local install path as "python.home" to make it work. >> (2) Once I initialize the /PythonInterpreter/ class, it seems it caches the argv I supply to it as for the subsequent invocation it uses the same argv values. I do call the close() method to do cleanup, but it doesn't help :( >> >> Properties preprops = System.getProperties(); >> Properties props = new Properties(); >> >> props.put("python.home", "C:\\Dev\\Python27"); >> props.put("python.console.encoding", "UTF-8"); >> props.put("python.security.respectJavaAccessibility", "false"); >> props.put("python.import.site", "false"); >> >> PythonInterpreter.initialize(preprops, props, arguments); >> PythonInterpreter pyInterpreter = new PythonInterpreter(); >> >> try { >> resource = new ClassPathResource("mypyscript.py"); >> out = new ByteArrayOutputStream(); >> err = new ByteArrayOutputStream(); >> pyInterpreter.setOut(out); >> pyInterpreter.setErr(err); >> pyInterpreter.execfile(resource.getInputStream()); >> result[0] = out.toString(); // reading the output >> result[1] = err.toString(); // reading any error >> } catch (Exception e) { >> throw new Exception(e); >> } finally { >> try { >> if (out != null) >> out.close(); >> if (err != null) >> err.close(); >> pyInterpreter.close(); >> } catch (IOException e) { >> e.printStackTrace(); >> } >> } >> >> Please help. >> >> Thanks, >> >> Deb >> >> >> ------------------------------------------------------------------------------ >> Check out the vibrant tech community on one of the world's most >> engaging tech sites, Slashdot.org! http://sdm.link/slashdot >> >> >> _______________________________________________ >> Jython-users mailing list >> Jyt...@li... >> https://lists.sourceforge.net/lists/listinfo/jython-users > > > ------------------------------------------------------------------------------ > Check out the vibrant tech community on one of the world's most > engaging tech sites, Slashdot.org! http://sdm.link/slashdot > _______________________________________________ > Jython-users mailing list > Jyt...@li... > https://lists.sourceforge.net/lists/listinfo/jython-users |