|
From: Debashish <deb...@gm...> - 2018-08-12 09:53:49
|
Sorry, I got confused by the term CPython, I guess if I have Python
installed its already CPython that I am using :) So the first bullet in my
reply should only read that "Indeed I set *python.home* to my local CPython
installation". And that worked (somehow).
On Sun, 12 Aug 2018 at 15:11, Debashish <deb...@gm...> wrote:
> Hi Jeff, Adam,
>
> Thanks a ton for the prompt reply. Few clarifications:
>
> 1. The *python.home* path I gave is the *local* Python 2.7
> installation path. I assume you are saying this should be *CPython*
> home rather. I will try this after installing CPython locally.
> 2. The problem is that I wish to deploy my code on Pivotal Cloud
> Foundry (PCF) where I would not be able to install anything else apart from
> the application JAR, no file-system access is available as since the code
> runs inside PCF containers, I cannot expect Python or CPython to be
> installed on that system.
> 3. I tried several thing to make it work (for e.g. extracted the *Lib*
> folder from the JAR and added it on the classpath, also renamed the JAR to
> *jython.jar* and added it to classpath, supplied the Lib folder path
> as *python.path* as well), none of these worked. It seems if there is
> no way to supply the absolute path, then there is no way to make it work
> from within a Java JAR.
> 4. My Python script is current 400 LOCs and will keep on growing, so I
> cannot possibly call its *functions* from my Java code as it would
> couple it to the Python code. I guess the only better option would be to
> port this Python code to Java.
> 5. I am using Jython Standalone JAR 2.7.1 from Maven central. I think
> what you are saying is that instead of passing command line arguments
> (argv) to the static *initialize* method I can pass it to the
> *PythonInterpreter* object rather. I am not sure how, as I do not such
> any such method in the API. Is there a code example available?
>
> Thanks again for your help.
>
> Deb
>
> On Sun, 12 Aug 2018 at 03:26, Adam Burke <ada...@gm...> wrote:
>
>> 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
>>
>>
>> ------------------------------------------------------------------------------
>> 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
>>
>
|