[erlang-questions] Best way to interface Erlang with Java code

zabrane Mikael zabrane3@REDACTED
Wed Dec 9 23:51:46 CET 2009


Hi Erlangers !

Following your advices about "open_port" & "port_command",  my Erlang
interface to crontrol the small java example is working very well.

Next step is to be able to send data to a "java" program that's waiting to
read from "stdin".

JAVA side
========
$ java print.java -           % "-" mean read from "stdin"

Erlang side
=========
I've a binary string <<"Hello World">>, and simply want to send it to this
"java" program (via port_command, but it doesn't work). The latter will just
printout "Hello World" on the shell.

Help, please !!

Regards
Zabrane


2009/12/7 Michael McDaniel <erlangy@REDACTED>

>  and another using extra re features  ...
>
>
>  1> Cmd = "java transform animals.txt ; echo $?" .
> "java transform animals.txt ; echo $?" .
>  2> {match, [Val,Ret]} =
>             re:run( os:cmd(Cmd),
>                     "(?<VAL>.*)(?<RETCODE>[0-9])\\n$",
>                     [dotall,ungreedy,{capture,['VAL','RETCODE'],list}]).
> {match, ["Cat\nShark\n...", "1"]}
>  3> Ret.
> "1"
>  4> Val.
> "Cat\nShark\n..."
>  5> re:split(Val, "\n", [{return,list}]).
> ["Cat", "Shark", ...]
>
>
> the above presumes single digit return codes
>
> os:cmd/1 is not the only tool to get other program output; e.g. running
> via a port, or using jinterface.  Or maybe the new NIF experimental
> feature in R13B03.
>
>
> ~M
>
>
> On Sun, Dec 06, 2009 at 07:13:52PM -0800, Michael McDaniel wrote:
> >  one way ...
> >
> >
> >  1> L = re:split (os:cmd ("java transform animals.txt ; echo $?"), "\n").
> >  [<<"Cat">>,
> >  <<"Shark">>,
> >  ........                  % a lot of animal names here (more than 1000)
> >  <<"Wolf">>,
> >   <<"1">>,<<>>]
> >
> >  2> Ret = lists:nth( 2, lists:reverse( L ) ) .
> > <<"1">>
> >  3> case Ret
> >  3> of <<"0">> -> do_something ;
> >  3> _          -> do_something_else
> >  3> end.
> > failure
> >
> >
> >  read up on lists and re modules for different ways of playing with
> >  the output
> >
> > ~Michael
> >
> >
> > On Mon, Dec 07, 2009 at 03:37:25AM +0100, zabrane Mikael wrote:
> > > Hi Michael !
> > >
> > > I found a subtle problem when trying your solution when my program
> returns a
> > > text with one or more "\n".
> > >
> > > Eg:
> > > 1> re:split (os:cmd ("java transform animals.txt ; echo $?"), "\n").
> > > [<<"Cat">>,
> > > <<"Shark">>,
> > > ........                  % a lot of animal names here (more than 1000)
> > > <<"Wolf">>,
> > >  <<"1">>,<<>>]
> > > 2>
> > >
> > > How then can I distinguish between my program output and the error code
> > > (which is at the end of the list) ?
> > >
> > > Thanks
> > > Zabrane
> > >
> > > 2009/12/5 Michael <erlangy@REDACTED>
> > >
> > > >  on my Linux box ...
> > > >
> > > > $ erl
> > > > Erlang R13B03 (erts-5.7.4) [rq:1] [async-threads:0] [hipe]
> > > > [kernel-poll:false]
> > > >
> > > > Eshell V5.7.4  (abort with ^G)
> > > > 1> re:split(os:cmd("java x ; echo $?"),"\n").
> > > > [<<"Exception in thread \"main\" java.lang.NoClassDefFoundError:
> x">>,
> > > >  <<"1">>,<<>>]
> > > > 2>
> > > >
> > > >
> > > > On Sat, Dec 05, 2009 at 06:27:24PM +0100, zabrane Mikael wrote:
> > > > > Hi Sean !
> > > > >
> > > > > Ok I see. But how then cal I handle error code in Erlang if my Java
> > > > program
> > > > > crash or returns something different from error code 0?
> > > > >
> > > > > Thanks
> > > > > Zabrane
> > > > >
> > > > > 2009/12/5 Sean Cribbs <seancribbs@REDACTED>
> > > > >
> > > > > > zabrane Mikael wrote:
> > > > > >
> > > > > >> Hi List !
> > > > > >>
> > > > > >> I've a small program written in "Java" which take a filename
> (input),
> > > > > >> proceed it, and print out
> > > > > >> a text (output).
> > > > > >>
> > > > > >> What's the best way to be able to access to that program from
> Erlang?
> > > > > >> My whish is get back the "output" as an Erlang binary.
> > > > > >>
> > > > > >> Thanks
> > > > > >> Zabrane
> > > > > >>
> > > > > >>
> > > > > >>
> > > > > > Use os:cmd/1, which returns a string/list -
> > > > > > http://erldocs.com/R13B03/kernel/os.html?search=os&i=5
> > > > > >
> > > > > > Sean
> > > > > >
> > > >
> > > > ________________________________________________________________
> > > > erlang-questions mailing list. See http://www.erlang.org/faq.html
> > > > erlang-questions (at) erlang.org
> > > >
> >
> > ________________________________________________________________
> > erlang-questions mailing list. See http://www.erlang.org/faq.html
> > erlang-questions (at) erlang.org
> >
>
>
> ________________________________________________________________
> erlang-questions mailing list. See http://www.erlang.org/faq.html
> erlang-questions (at) erlang.org
>
>


More information about the erlang-questions mailing list