Py: List materials with texture used by mesh
Using blender internal, a material can use up to 18 textures to get it's final appearance. An objects face can have one material assigned to it, any and all textures in that material are used by the face.

In object mode you can get the texture used by each face with

obj = bpy.context.object
for f in obj.data.polygons:
    for t in obj.material_slots[f.material_index].material.texture_slots:
        if t is not None:
            print("Face %d uses texture %s"%(f.index,t.name))


Of course this is using Blender Internal, for cycles you will need to walk through the nodetree to find the nodes your interested in.