With vedo
you can do:
from vedo import Sphere, show
s1 = Sphere(r=1.2).pos(-1, 0, 0).c('red5').alpha(0.2)
s2 = Sphere(r=1).pos(0.1, 0.2, 0.3).c('blue5').alpha(0.2)
disc = s1.intersect_with(s2).triangulate()
disc.c('white').lw(1).lighting("off")
print(disc.coordinates.shape)
show(s1, s2, disc, axes=1)
This generalizes to any arbitrary polygonal surface.