Calling Subsidiary Mathematica Processes

LinkLaunch["prog"]start an external program and open a connection to it

Connecting to a subsidiary program via MathLink.

This starts a subsidiary Mathematica process on the computer system used here.
In[1]:=
Click for copyable input
Out[1]=
Here is a packet representing the first input prompt from the subsidiary Mathematica process.
In[2]:=
Click for copyable input
Out[2]=
This writes a packet representing text to enter in the subsidiary Mathematica process.
In[3]:=
Click for copyable input
Here is a packet representing the output prompt from the subsidiary Mathematica process.
In[4]:=
Click for copyable input
Out[4]=
And here is the actual result from the computation.
In[5]:=
Click for copyable input
Out[5]=

The basic way that the various different objects involved in a Mathematica session are kept organized is by using MathLink packets. A MathLink packet is simply an expression with a definite head that indicates its role or meaning.

EnterTextPacket["input"]text to enter corresponding to an input line
ReturnTextPacket["output"]text returned corresponding to an output line
InputNamePacket["name"]text returned for the name of an input line
OutputNamePacket["name"]text returned for the name of an output line

Basic packets used in Mathematica sessions.

The fact that LinkRead returns an InputNamePacket indicates that the subsidiary Mathematica is now ready for new input.
In[6]:=
Click for copyable input
Out[6]=
This enters two Print commands as input.
In[7]:=
Click for copyable input
Here is the text from the first Print.
In[8]:=
Click for copyable input
Out[8]=
And here is the text from the second Print.
In[9]:=
Click for copyable input
Out[9]=
No output line is generated, so the new packet is an InputNamePacket.
In[10]:=
Click for copyable input
Out[10]=
TextPacket["string"]text from Print etc.
MessagePacket[symb,"tag"]a message name
DisplayPacket["string"]parts of PostScript graphics
DisplayEndPacket["string"]the end of PostScript graphics

Some additional packets generated in Mathematica sessions.

If you enter input to Mathematica using EnterTextPacket["input"], then Mathematica will automatically generate a string version of your output, and will respond with ReturnTextPacket["output"]. But if you instead enter input using EnterExpressionPacket[expr] then Mathematica will respond with ReturnExpressionPacket[expr] and will not turn your output into a string.

EnterExpressionPacket[expr]an expression to enter corresponding to an input line
ReturnExpressionPacket[expr]an expression returned corresponding to an output line

Packets for representing input and output lines using expressions.

This enters an expression into the subsidiary Mathematica session without evaluating it.
In[11]:=
Click for copyable input
Here are the next 3 packets that come back from the subsidiary Mathematica session.
In[12]:=
Click for copyable input
Out[12]=

InputNamePacket and OutputNamePacket packets are often convenient for making it possible to tell the current state of a subsidiary Mathematica session. But you can suppress the generation of these packets by calling the subsidiary Mathematica session with a string such as .

Even if you suppress the explicit generation of InputNamePacket and OutputNamePacket packets, Mathematica will still process any input that you give with EnterTextPacket or EnterExpressionPacket as if you were entering an input line. This means for example that Mathematica will call $Pre and $Post, and will assign values to In[$Line] and Out[$Line].

EvaluatePacket[expr]an expression to be sent purely for evaluation
ReturnPacket[expr]an expression returned from an evaluation

Evaluating expressions without explicit input and output lines.

This sends an EvaluatePacket. The Unevaluated prevents evaluation before the packet is sent.
In[13]:=
Click for copyable input
The result is a pure ReturnPacket.
In[14]:=
Click for copyable input
Out[14]=
This sends an EvaluatePacket requesting evaluation of Print[x].
In[15]:=
Click for copyable input
The first packet to come back is a TextPacket representing text generated by the Print.
In[16]:=
Click for copyable input
Out[16]=
After that, the actual result of the Print is returned.
In[17]:=
Click for copyable input
Out[17]=

In most cases, it is reasonable to assume that sending an EvaluatePacket to Mathematica will simply cause Mathematica to do a computation and to return various other packets, ending with a ReturnPacket. However, if the computation involves a function like Input, then Mathematica will have to request additional input before it can proceed with the computation.

This sends a packet whose evaluation involves an Input function.
In[18]:=
Click for copyable input
What comes back is an InputPacket which indicates that further input is required.
In[19]:=
Click for copyable input
Out[19]=
There is nothing more to be read on the link at this point.
In[20]:=
Click for copyable input
Out[20]=
This enters more input.
In[21]:=
Click for copyable input
Now the Input function can be evaluated, and a ReturnPacket is generated.
In[22]:=
Click for copyable input
Out[22]=
LinkInterrupt[link]send an interrupt to a MathLink-compatible program

Interrupting a MathLink-compatible program.

This sends a very time-consuming calculation to the subsidiary process.
In[23]:=
Click for copyable input
The calculation is still going on.
In[24]:=
Click for copyable input
Out[24]=
This sends an interrupt.
In[25]:=
Click for copyable input
Now the subsidiary process has stopped, and is sending back an interrupt menu.
In[26]:=
Click for copyable input
Out[26]=
This closes the link.
In[27]:=
Click for copyable input
New to Mathematica? Find your learning path »
Have a question? Ask support »