I didn't load profile.ijs. I just did a quick try, loading profile.ijs, and the same fail occured.My python script is sitting in my home directory, I am using absolute paths in the python scrip to call my scripts. I'm currently working in Linux. The reason I am pretty sure my script didn't load is that I tried to call a verb (public verb) from the script, with an argument and the output was None, None, None, None, i.e. no output (this is still using the python function from the script in the link from before). I am going to give it another try tomorrow. Thanks.
> Date: Sat, 19 Jul 2014 18:08:19 +0800 > From: [email protected] > To: [email protected] > Subject: Re: [Jprogramming] Calling j.dll from python > > Did you load profile.ijs during booting? > Where is your working directory? > How do you verify script was loaded? > > Сб, 19 июл 2014, Jon Hough написал(а): > > Thanks Bill et al. > > I think I have the beginnings of a workable connection. I can call JDo and > > JGetM now, thanks to Jun Kim's script (with a couple of modifications). > > One thing that is still failing, is trying to load a script through jDLL. > > e.g. (added to previous python script) > > run_jcmd("load 'j801-user/temp/myscript.ijs' ") NB. DOS NOT SEEM TO LOAD > > This is my main problem at the moment, as I really want to load my script > > and call its verbs through a Python interface and display its results in > > Python/TKinter. > > > > > Date: Sat, 19 Jul 2014 14:04:32 +0800 > > > From: [email protected] > > > To: [email protected] > > > Subject: Re: [Jprogramming] Calling j.dll from python > > > > > > There is another j ide written in javascript and python. search > > > for qjide in jwiki and you may find something useful. > > > > > > Сб, 19 июл 2014, Jon Hough написал(а): > > > > Well, my plam, which may be stupid, is to create a pythin, tkinter UI > > > > and call j from this. > > > > > > > > --- Original Message --- > > > > > > > > From: "Devon McCormick" <[email protected]> > > > > Sent: July 19, 2014 1:01 PM > > > > To: "J-programming forum" <[email protected]> > > > > Subject: Re: [Jprogramming] Calling j.dll from python > > > > > > > > For what you want to do, could you do it the other way around: call > > > > Python > > > > from J? Or, alternatively, invoke J on a command-line from Python? > > > > > > > > > > > > On Fri, Jul 18, 2014 at 10:31 PM, Jon Hough <[email protected]> wrote: > > > > > > > > > I slightly modified the python script in the link (I removed > > > > > references to > > > > > odedell, whatever that is, and I called thecdll.LoadLibrary(...) > > > > > Here are my very minor edits: > > > > > > > > > > import operatorfrom ctypes import * > > > > > IDEN="jcmd_python" > > > > > def mulall(arr): return reduce(operator.mul,arr,1)def run_jcmd( > > > > > js): > > > > > j.JDo(p,IDEN+'=:'+js)def get_result(jdll,variable=IDEN): > > > > > pi=[pointer(c_int()) for _ in xrange(4)] > > > > > j.JGetM(jdll,variable,*pi) > > > > > #datatype,rank, *shape, *value type=pi[0].contents.value if > > > > > type==0: > > > > > #error return None,None,None,None rank=pi[1].contents.value > > > > > shape=list((c_int*rank).from_address(pi[2].contents.value)) > > > > > flat_size=mulall(shape) > > > > > data=list((c_int*flat_size).from_address(pi[3].contents.value)) > > > > > return > > > > > type,rank,shape,resize(shape,data)def resize(shap,dat): > > > > > shap=shap[:] > > > > > flat_size=mulall(shap) while len(shap)>1: shd=[] > > > > > start=0 > > > > > last_size=shap.pop() while start<flat_size: > > > > > shd.append(dat[start:start+last_size]) start+=last_size > > > > > flat_size=len(shd) dat=shd else: shd=dat return > > > > > shd > > > > > cdll.LoadLibrary("j801/bin/libj.so")j = > > > > > CDLL("j801/bin/libj.so")p=j.JInit()run_jcmd("i. 3 > > > > > 3")type,rank,shape,data=get_result(p) #returns the last resultprint > > > > > shape,datarun_jcmd("abc=: i: 5")print get_result(p,"abc") > > > > > > > > > > This worked! > > > > > I ran it and output: > > > > > [3, 3] [[0, 1, 2], [3, 4, 5], [6, 7, 8]](4, 1, [11], [-5, -4, -3, -2, > > > > > -1, > > > > > 0, 1, 2, 3, 4, 5]) > > > > > > > > > > Thanks! > > > > > > > > > > > Date: Fri, 18 Jul 2014 22:19:47 -0400 > > > > > > From: [email protected] > > > > > > To: [email protected] > > > > > > Subject: Re: [Jprogramming] Calling j.dll from python > > > > > > > > > > > > Jon - it's trickier than I thought. > > > > > > > > > > > > > > > > > > I have a partial implementation working that I can tinker with > > > > > > tomorrow > > > > > > > > > > > > You need to use WinDLL on windows to get the calling convention > > > > > > right > > > > > > > > > > > > J = WinDLL("c:/users/jbogner/downloads/j801_win32/bin/j.dll") > > > > > > jt = J.JInit() > > > > > > J.JDo(jt, "A=:i.5") > > > > > > Out[34]: 0 > > > > > > > > > > > > see > > > > > http://www.jsoftware.com/pipermail/programming/2013-November/033974.html > > > > > > for details on how to get the values. I have modified the code to > > > > > > work > > > > > > with WinDLL and have something roughly working but ran out of time > > > > > > to > > > > > work > > > > > > on it more tonight > > > > > > > > > > > > > > > > > > On Fri, Jul 18, 2014 at 7:54 PM, Jon Hough <[email protected]> > > > > > > wrote: > > > > > > > > > > > > > I am interested in calling J specifically from Python, preferably > > > > > > > on > > > > > Linux > > > > > > > and Windows (and Mac). > > > > > > > As Joe suggested, I've tried playing with jdll.ijs. > > > > > > > I still can't get JGetM to work, but I'll have another bash at it > > > > > > > later > > > > > > > today. > > > > > > > Thanks! > > > > > > > > > > > > > > > From: [email protected] > > > > > > > > Date: Sat, 19 Jul 2014 07:27:03 +0800 > > > > > > > > To: [email protected] > > > > > > > > Subject: Re: [Jprogramming] Calling j.dll from python > > > > > > > > > > > > > > > > Set and get data using j.dll can be quite involving. If you use > > > > > windows, > > > > > > > it is much easier you to use to ole/com interface, search jwiki > > > > > > > for > > > > > more > > > > > > > info. Note that j8 only support the jdllserver interface. > > > > > > > > > > > > > > > > On 18.07.2014, at 23:05, Jon Hough <[email protected]> wrote: > > > > > > > > > > > > > > > > > Thanks, > > > > > > > > > My test script, so far, is > > > > > > > > > > > > > > > > > > from ctypes import * > > > > > > > > > > > > > > > > > > cdll.LoadLibrary("j801/bin/libj.so") > > > > > > > > > j = CDLL("j801/bin/libj.so") > > > > > > > > > jt = j.JInit() > > > > > > > > > > > > > > > > > > j.JDo(jt, "a =: 1") > > > > > > > > > > > > > > > > > > a =j.JGetM( "a") > > > > > > > > > > > > > > > > > > print a > > > > > > > > > > > > > > > > > > This returns 4, even though I set a to be 1. I'm assuming 4 > > > > > > > > > is the > > > > > > > number of bytes returned (i.e. an int)??(By the way, if I do > > > > > j.JGetM(jt, > > > > > > > "a") I get a seg fault.Regarding jdll.ijs, unfortunately my > > > > > > > J-skills > > > > > are > > > > > > > not powerful enough yet to make much sense of it: > > > > > > > > > jget=: 3 : 0cmd=. libj,' JGetM i x *c *x *x *x *x''e p n t r > > > > > > > > > s d'=. > > > > > > > cmd cd pJ,(,y);4#<,0if. e do. smoutput 'error code: ',":e > > > > > > > return.end.(t,r,s) jfix d) > > > > > > > > > In particular > > > > > > > > > JGetM i x *c *x *x *x *x > > > > > > > > > is confusing. > > > > > > > > >> Date: Fri, 18 Jul 2014 10:53:44 -0400 > > > > > > > > >> From: [email protected] > > > > > > > > >> To: [email protected] > > > > > > > > >> Subject: Re: [Jprogramming] Calling j.dll from python > > > > > > > > >> > > > > > > > > >> JGetM is what you need, but I strongly suggest reviewing > > > > > > > > >> http://jsoftware.com/wsvn/addons/trunk/general/misc/jdll.ijs > > > > > > > > >> (or > > > > > > > your local > > > > > > > > >> version) to get a better understanding of how things work > > > > > > > > >> > > > > > > > > >> This part addresses your question: > > > > > > > > >> > > > > > > > > >> jget=: 3 : 0 > > > > > > > > >> cmd=. libj,' JGetM i x *c *x *x *x *x' > > > > > > > > >> 'e p n t r s d'=. cmd cd pJ,(,y);4#<,0 > > > > > > > > >> if. e do. > > > > > > > > >> smoutput 'error code: ',":e > > > > > > > > >> return. > > > > > > > > >> end. > > > > > > > > >> (t,r,s) jfix d > > > > > > > > >> ) > > > > > > > > >> > > > > > > > > >> > > > > > > > > >> On Fri, Jul 18, 2014 at 10:51 AM, Jon Hough > > > > > > > > >> <[email protected]> > > > > > > > wrote: > > > > > > > > >> > > > > > > > > >>> Please ignore the last sentence from my previous email. > > > > > > > > >>> Copied > > > > > and > > > > > > > pasted > > > > > > > > >>> by accident. > > > > > > > > >>> > > > > > > > > >>>> From: [email protected] > > > > > > > > >>>> To: [email protected] > > > > > > > > >>>> Date: Fri, 18 Jul 2014 15:50:41 +0100 > > > > > > > > >>>> Subject: Re: [Jprogramming] Calling j.dll from python > > > > > > > > >>>> > > > > > > > > >>>> Joe, thanks. Your suggestion seems to work. > > > > > > > > >>>> However JGets seems to not exist.How do I then get the > > > > > > > > >>>> variable, > > > > > > > once > > > > > > > > >>> assigned? > > > > > > > > >>>> I tried to search through the .so/.dll for "get" functions: > > > > > > > > >>>> > > > > > > > > >>>> nm -g libj.so | grep Get > > > > > > > > >>>> Although jdll.ijs seems to contain jget, when I tried to > > > > > > > > >>>> call > > > > > this > > > > > > > (in > > > > > > > > >>> Python) I get " undefined symbol: jget" (with variations > > > > > > > > >>> on > > > > > upper > > > > > > > and > > > > > > > > >>> lower cases) > > > > > > > > >>>> > > > > > > > > >>>> > > > > > > > > >>>> > > > > > > > > >>>> > > > > > > > > >>>> and couldn't find a function that seemed to get the > > > > > variables.Also > > > > > > > I'm > > > > > > > > >>> having trouble finding libj.dll > > > > > > > > >>>>> Date: Fri, 18 Jul 2014 10:36:06 -0400 > > > > > > > > >>>>> From: [email protected] > > > > > > > > >>>>> To: [email protected] > > > > > > > > >>>>> Subject: Re: [Jprogramming] Calling j.dll from python > > > > > > > > >>>>> > > > > > > > > >>>>> JInit() returns the instance that you need to invoke > > > > > > > > >>>>> against > > > > > > > > >>>>> > > > > > > > > >>>>> see addons/general/misc/jdll.ijs > > > > > > > > >>>>> > > > > > > > > >>>>> jdo is defined as: > > > > > > > > >>>>> > > > > > > > > >>>>> jdo=: 3 : 0 > > > > > > > > >>>>> > > > > > > > > >>>>> (libj,' JDo i x *c') cd pJ, boxopen y > > > > > > > > >>>>> > > > > > > > > >>>>> ) > > > > > > > > >>>>> > > > > > > > > >>>>> > > > > > > > > >>>>> so I suspect you need to be passing that pointer address > > > > > > > > >>>>> with > > > > > > > python > > > > > > > > >>> too... > > > > > > > > >>>>> > > > > > > > > >>>>> > > > > > > > > >>>>> jt = j.JInit() > > > > > > > > >>>>> > > > > > > > > >>>>> j.JDo(jt, "x =: 3") > > > > > > > > >>>>> > > > > > > > > >>>>> > > > > > > > > >>>>> [untested] > > > > > > > > >>>>> > > > > > > > > >>>>> > > > > > > > > >>>>> > > > > > > > > >>>>> > > > > > > > > >>>>> > > > > > > > > >>>>> > > > > > > > > >>>>> On Fri, Jul 18, 2014 at 10:33 AM, Thomas Costigliola < > > > > > > > > >>> [email protected]> > > > > > > > > >>>>> wrote: > > > > > > > > >>>>> > > > > > > > > >>>>>> Bill, Jon, sorry if that suggestion did not apply. I > > > > > remembered it > > > > > > > > >>> was a > > > > > > > > >>>>>> common pitfall when calling from C. Maybe that is not > > > > > > > > >>>>>> the case > > > > > > > now. > > > > > > > > >>>>>> > > > > > > > > >>>>>> > > > > > > > > >>>>>> On Fri, Jul 18, 2014 at 10:29 AM, Jon Hough < > > > > > [email protected]> > > > > > > > > >>> wrote: > > > > > > > > >>>>>> > > > > > > > > >>>>>>> My previous email was regarding Windows (7 with J801) > > > > > > > > >>>>>>> I just tried to do the same in Ubuntu (J801) > > > > > > > > >>>>>>> cdll.LoadLibrary("j801/bin/libj.so") > > > > > > > > >>>>>>> j = CDLL("j801/bin/libj.so")>>> j.JInit()158010848 > > > > > > > > >>>>>>> No idea what the above output means. Is that the pointer > > > > > address > > > > > > > of > > > > > > > > >>>>>>> something? > > > > > > > > >>>>>>> And then: > > > > > > > > >>>>>>>>>> j.JDo("x =: 3")Segmentation fault (core dumped) > > > > > > > > >>>>>>> And Python (2.7) crashed. > > > > > > > > >>>>>>> > > > > > > > > >>>>>>>> Date: Fri, 18 Jul 2014 22:09:28 +0800 > > > > > > > > >>>>>>>> From: [email protected] > > > > > > > > >>>>>>>> To: [email protected] > > > > > > > > >>>>>>>> Subject: Re: [Jprogramming] Calling j.dll from python > > > > > > > > >>>>>>>> > > > > > > > > >>>>>>>> From which resource did you learn that(not python)? It > > > > > should be > > > > > > > > >>> very > > > > > > > > >>>>>> out > > > > > > > > >>>>>>>> dated. > > > > > > > > >>>>>>>> On Jul 18, 2014 6:00 PM, "Jon Hough" > > > > > > > > >>>>>>>> <[email protected]> > > > > > > > > >>> wrote: > > > > > > > > >>>>>>>> > > > > > > > > >>>>>>>>> I am trying to call jdll.JDo from python but I get the > > > > > error > > > > > > > > >>> message, > > > > > > > > >>>>>>>>> access violation. > > > > > > > > >>>>>>>>> > > > > > > > > >>>>>>>>> Here is my python. > > > > > > > > >>>>>>>>> > > > > > > > > >>>>>>>>> Cdll.LoadLibrary(path to j.dll) > > > > > > > > >>>>>>>>> J =CDLL(path to j.dll) > > > > > > > > >>>>>>>>> > > > > > > > > >>>>>>>>> J.JDo("x =: i. 3") > > > > > > > > >>>>>>>>> > > > > > > > > >>>>>>>>> This gives am error. In fact any string gives the > > > > > > > > >>>>>>>>> error. > > > > > > > > >>>>>>>>> > > > > > > > > >>>>>>>>> J.JGet doesnt seem to give errors, but since I cannot > > > > > > > > >>>>>>>>> set > > > > > any j > > > > > > > > >>>>>>> variables, > > > > > > > > >>>>>>>>> it is not easy to test. > > > > > > > > >>>>>>>>> > > > > > > > > >>>>>>>>> > > > > > > > > >>>>>> > > > > > > > > >>> > > > > > > > ---------------------------------------------------------------------- > > > > > > > > >>>>>>>>> For information about J forums see > > > > > > > > >>>>>> http://www.jsoftware.com/forums.htm > > > > > > > > >>>>>>>>> > > > > > > > > >>>>>>>> > > > > > > > > >>> > > > > > > > ---------------------------------------------------------------------- > > > > > > > > >>>>>>>> For information about J forums see > > > > > > > > >>> http://www.jsoftware.com/forums.htm > > > > > > > > >>>>>>> > > > > > > > > >>>>>>> > > > > > > > > >>> > > > > > > > ---------------------------------------------------------------------- > > > > > > > > >>>>>>> For information about J forums see > > > > > > > > >>> http://www.jsoftware.com/forums.htm > > > > > > > > >>>>>>> > > > > > > > > >>>>>> > > > > > > > > >>> > > > > > > > ---------------------------------------------------------------------- > > > > > > > > >>>>>> For information about J forums see > > > > > > > > >>> http://www.jsoftware.com/forums.htm > > > > > > > > >>>>>> > > > > > > > > >>>>> > > > > > > > ---------------------------------------------------------------------- > > > > > > > > >>>>> For information about J forums see > > > > > > > http://www.jsoftware.com/forums.htm > > > > > > > > >>>> > > > > > > > > >>>> > > > > > > > ---------------------------------------------------------------------- > > > > > > > > >>>> For information about J forums see > > > > > > > http://www.jsoftware.com/forums.htm > > > > > > > > >>> > > > > > > > > >>> > > > > > > > ---------------------------------------------------------------------- > > > > > > > > >>> For information about J forums see > > > > > > > http://www.jsoftware.com/forums.htm > > > > > > > > >>> > > > > > > > > >> > > > > > ---------------------------------------------------------------------- > > > > > > > > >> For information about J forums see > > > > > > > http://www.jsoftware.com/forums.htm > > > > > > > > > > > > > > > > > > > > > > > ---------------------------------------------------------------------- > > > > > > > > > For information about J forums see > > > > > http://www.jsoftware.com/forums.htm > > > > > > > > > > > > > ---------------------------------------------------------------------- > > > > > > > > For information about J forums see > > > > > http://www.jsoftware.com/forums.htm > > > > > > > > > > > > > > ---------------------------------------------------------------------- > > > > > > > For information about J forums see > > > > > > > http://www.jsoftware.com/forums.htm > > > > > > > > > > > > > ---------------------------------------------------------------------- > > > > > > For information about J forums see > > > > > > http://www.jsoftware.com/forums.htm > > > > > > > > > > ---------------------------------------------------------------------- > > > > > For information about J forums see http://www.jsoftware.com/forums.htm > > > > > > > > > > > > > > > > > > > > > -- > > > > Devon McCormick, CFA > > > > ---------------------------------------------------------------------- > > > > For information about J forums see http://www.jsoftware.com/forums.htm > > > > ---------------------------------------------------------------------- > > > > For information about J forums see http://www.jsoftware.com/forums.htm > > > > > > -- > > > regards, > > > ==================================================== > > > GPG key 1024D/4434BAB3 2008-08-24 > > > gpg --keyserver subkeys.pgp.net --recv-keys 4434BAB3 > > > gpg --keyserver subkeys.pgp.net --armor --export 4434BAB3 > > > ---------------------------------------------------------------------- > > > For information about J forums see http://www.jsoftware.com/forums.htm > > > > ---------------------------------------------------------------------- > > For information about J forums see http://www.jsoftware.com/forums.htm > > -- > regards, > ==================================================== > GPG key 1024D/4434BAB3 2008-08-24 > gpg --keyserver subkeys.pgp.net --recv-keys 4434BAB3 > gpg --keyserver subkeys.pgp.net --armor --export 4434BAB3 > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
