I'd like to know how can I call Mathematica functions from Python.
I appreciate a example, for example, using the Mathematica function Prime.
I had search about MathLink but how to use it in Python is a little obscure to me.
I tried to use a Mathematica-Python library called pyml but I hadn't no sucess, maybe because this lib looks very old (in tutorial says Mathematica 2 or 3).
So, someone knows a good way to write python programs who uses Mathematica functions and can give me an example?
Maybe this edit can help someone who wants to use mathlinks directly.
To another solution, please see the answer accepted.
Using the Wolfram/Mathematica/8.0/SystemFiles/Links/Python I could had sucess in compiling the module changing some things in setup.py.
My architechture is
2-Changing the lib name
3-Copying the file
Wolfram/Mathematica/8.0/SystemFiles/Libraries/Linux-x86-64/libML64i3.so to the path pointed in setup.py
library_dirs = ["/usr/local/Wolfram/Mathematica/" + mathematicaversion + "/SystemFiles/Links/MathLink/DeveloperKit/Linux/CompilerAdditions"].
5-Compiling the source with
sudo python setup.py build.
6-Installing the lib with
sudo python setup.py install
4-Editing the file
/etc/ld.so.conf and putting the line
5-Creating a directory in
with the lib
I had tested the scripts
python guifrontend.py -linkname "math -mathlink" -linkmode launch and
python textfrontend.py -linkname "math -mathlink" -linkmode launch and worked fine.
Looks like I almost. But the script
>>> from mathlink import * >>> import exceptions,sys, re, os >>> from types import ListType >>> mathematicaversion = "8.0" >>> os.environ["PATH"] = "/usr/local/Wolfram/Mathematica/" + mathematicaversion + ":/usr/local/bin:/usr/bin:/bin" >>> e = env() >>> sys.argv=['textfrontend.py', '-linkname', 'math -mathlink', '-linkmode', 'launch'] >>> kernel = e.openargv(sys.argv) >>> kernel.connect() >>> kernel.ready() 0 >>> kernel.putfunction("Prime",1) >>> kernel.putinteger(10) >>> kernel.flush() >>> kernel.ready() 0 >>> kernel.nextpacket() 8 >>> packetdescriptiondictionary 'ReturnPacket' >>> kernel.getinteger() Traceback (most recent call last): File "<stdin>", line 1, in <module> mathlink.error: MLGet out of sequence.
breaks in the last command and I don't know why. How can I fix this?