[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