import bpy
from bpy.app.handlers import persistent

bl_info = {
    "name": "Playback Once",
    "author": "Adhi Hargo",
    "version": (1, 0, 0),
    "blender": (2, 67, 3),
    "location": "",
    "description": "Playback once.",
    "warning": "",
    "wiki_url": "",
    "tracker_url": "",
    "category": "Animation"}

@persistent
def stopPlaybackAtEnd(scene):
    if scene.frame_current >= scene.frame_end:
        bpy.ops.screen.animation_cancel()

def register():
    bpy.app.handlers.frame_change_pre.append(stopPlaybackAtEnd)

def unregister():
    bpy.app.handlers.frame_change_pre.remove(stopPlaybackAtEnd)
    
if __name__ == "__main__":
    register()

[((22, 4, 22, 63), 'bpy.app.handlers.frame_change_pre.append', 'bpy.app.handlers.frame_change_pre.append', ({(22, 45, 22, 62): 'stopPlaybackAtEnd'}, {}), '(stopPlaybackAtEnd)', False, 'import bpy\n'), ((25, 4, 25, 63), 'bpy.app.handlers.frame_change_pre.remove', 'bpy.app.handlers.frame_change_pre.remove', ({(25, 45, 25, 62): 'stopPlaybackAtEnd'}, {}), '(stopPlaybackAtEnd)', False, 'import bpy\n'), ((19, 8, 19, 41), 'bpy.ops.screen.animation_cancel', 'bpy.ops.screen.animation_cancel', ({}, {}), '()', False, 'import bpy\n')]