How to access coordinates of Bezier curve control point handles?
Here is a Python function to print X, Y, Z values of the points given a curve object reference parameter.
(based on the answer linked in the comment)

import mathutils.geometry

# The parameters can be found by taking the coordinate and 
# right handle of a point, and the coordinate and
# left handle of the next point in the Bezier points array.
# For cyclic curves the last point and the first point in the array 
# form an extra segment.

def printInterpolatedCurveSegmentPoints(existingCurveObj):

    spline = existingCurveObj.data.splines[0]
    numSegments = len(spline.bezier_points)
    assert(numSegments &gt;= 2)

    r = spline.resolution_u
    if spline.use_cyclic_u:
        numSegments += 1

    points = []
    for i in range(numSegments):
        nextIdx = (i + 1) % numSegments

        knot1 = spline.bezier_points[i].co
        handle1 = spline.bezier_points[i].handle_right
        handle2 = spline.bezier_points[nextIdx].handle_left
        knot2 = spline.bezier_points[nextIdx].co

        _points = mathutils.geometry.interpolate_bezier(knot1, handle1, handle2, knot2, r)
        points.extend(_points)

    assert('3D' == existingCurveObj.data.dimensions)
    for pointVec in points:
        print("Point X:", pointVec[0])
        print("Point Y:", pointVec[1])
        print("Point Z:", pointVec[2])
        print()