Here we run a Python3 interpreter to connect to a Python2.6 interpreter that has numpy installed. We send items to be added to an array and receive back the remote “repr” of the array:
import execnet
gw = execnet.makegateway("popen//python=python2.6")
channel = gw.remote_exec("""
import numpy
array = numpy.array([1,2,3])
while 1:
x = channel.receive()
if x is None:
break
array = numpy.append(array, x)
channel.send(repr(array))
""")
for x in range(10):
channel.send(x)
channel.send(None)
print (channel.receive())
will print on the CPython3.1 side:
array([1, 2, 3, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
A more refined real-life example of python3/python2 interaction is the anyvc project which uses version-control bindings in a Python2 subprocess in order to offer Python3-based library functionality.
Use your CPython interpreter to connect to a Jython 2.5.1 interpreter and work with Java types:
import execnet
gw = execnet.makegateway("popen//python=jython")
channel = gw.remote_exec("""
from java.util import Vector
v = Vector()
v.add('aaa')
v.add('bbb')
for val in v:
channel.send(val)
""")
for item in channel:
print (item)
will print on the CPython side:
aaa
bbb
(Experimental) use your CPython interpreter to connect to a IronPython interpreter which can work with C# classes. Here is an example for instantiating a CLR Array instance and sending back its representation:
import execnet
gw = execnet.makegateway("popen//python=ipy")
channel = gw.remote_exec("""
import clr
clr.AddReference("System")
from System import Array
array = Array[float]([1,2])
channel.send(str(array))
""")
print (channel.receive())
using Mono 2.0 and IronPython-1.1 this will print on the CPython side:
System.Double[](1.0, 2.0)
Note
Using IronPython needs more testing, likely newer versions will work better. please feedback if you have information.