Getting Python exit code when calling Python script from Java program

A.T.Hofkamp hat at se-162.se.wtb.tue.nl
Wed Jun 18 07:09:58 EDT 2008


On 2008-06-18, Quill_Patricia at emc.com <Quill_Patricia at emc.com> wrote:
> I have a Python script which is used to load data into a database. Up to
> now this script has been run by customers from the Windows command
> prompt using "python edg_loader.pyc". Any error messages generated are
> written to a log file.  A project team working in the same company as me
> here would like to use this loading utility. They write UI applications
> for Windows using Java. They were able to launch the Python script from
> within Java by creating a Process using Java ProcessBuilder class.
> However, the way the error handling is currently implemented isn't
> really suitable for use in a UI application. As I'm sure you can
> appreciate it's not really feasible to tell users of a UI program to
> keep checking the log files while the loading is underway!!. Ideally
> they would like the Python loading utility to return an error code and
> error message - the error message could then be displayed on a message
> box on the UI. 

The first thing to do is decide whether this is a Java problem, a Python
problem, or a OS problem. Then post the question in the appropiate forum.

One simple experiment may be to write a C function that returns a non-zero exit
code, and run that as job.

> I seem to be having problems implementing this. I tried using the
> sys.exit() method in my script and passed non -zero values. However the
> value wasn't picked up the by Java Process.exitValue() method - it kept

What did the OS say?
Run a program like below in OS ('python x.py'), then query the OS about the
exit code of the program. In that way, you can narrow down your search.

> picking up 0. On investigation it turned out that the exit value being
> read is from python.exe process, not from the Python script. Is there
> any way I can obtain the return value of a python script from a Java

This is not what I see happening here:

x.py:
import sys
sys.exit(138)

%  python2.4 x.py
%  echo $?
138

as you can see, the mechanism works at my Linux system.


> Java Process.getErrorSteam() method. 
> However I would really like to get the return codes working if possible
> and would appreciate any suggestions on how to implement this.

I'd suggest to first find out where in the Java->OS->Python->OS->Java chain
things go wrong.

As for how to handle a child-process from Java, try asking in a Java news
group.

Sincerely,
Albert



More information about the Python-list mailing list