glReadPixels(x, y, width, height, format, type)
arguments are similar to glDrawPixels, except x & y give the starting location (in pixels from the lower left corner)
In C, there is one additional argument - a memory buffer pointer.
To grab a frame and save it, using PIL:
data = glReadPixels(0, 0, glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT), GL_RGB, GL_UNSIGNED_BYTE)
img = Image.fromstring('RGB', (glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT)), data)
img.save('screendump.jpg')