How to stop blender game engine using Python upon reaching a condition in the script? I have the following script(pistonMover.py) which runs in the Blender "game engine" mode and I want to stop the game engine when posdiff is less than 0.0001. 

import bge
import COM
import time as t

def calc_com():
    obj_list_real = []
    for item in bge.logic.getCurrentScene().objects:            
        try:
            if item.name.startswith('Cube') and item.name != 'Cube.004':
                temp_dict = {}
                temp_dict['x'] = item.worldPosition.x
                temp_dict['y'] = item.worldPosition.y
                temp_dict['z'] = item.worldPosition.z                   
                temp_dict['mass'] = item.mass
                #temp_dict['name'] = item.name
                obj_list_real.append(temp_dict)
            if item.name.startswith('obj_'):
                temp_dict = {}
                temp_dict['x'] = item.worldPosition.x
                temp_dict['y'] = item.worldPosition.y
                temp_dict['z'] = item.worldPosition.z                     
                temp_dict['mass'] = item.mass
                obj_list_real.append(temp_dict)
        except AttributeError:
            pass    
    com = COM.COM(obj_list_real)
    return com

def getPistonpos():
    pistonpos = 0
    for item in bge.logic.getCurrentScene().objects:
        if item.name == "Cylinder":
            pistonpos = item.worldPosition.y
            break
    return pistonpos

def main():
    cont = bge.logic.getCurrentController()
    player = cont.owner
    scene = bge.logic.getCurrentScene()
    keyboard = bge.logic.keyboard
    player.localPosition.y -=0.1
    pistonpos = 0
    flag = False
    try:
        pistonpos = bge.logic.globalDict['pistonpos']
        flag = True
    except KeyError:
        bge.logic.globalDict['pistonpos'] = getPistonpos()
    posdiff = abs(getPistonpos() - pistonpos)
    if posdiff &lt; 0.0001 and flag:
        print(posdiff)
    bge.logic.globalDict['pistonpos'] = getPistonpos()
    if bge.logic.KX_INPUT_ACTIVE == keyboard.events[bge.events.DOWNARROWKEY]:
        calc_com()



main()


I have tested this script and works perfectly but, I was unable to find a way to stop game engine anywhere. Also, I invoke this script using bpy.ops.wm.blenderplayer_start() from Blender in "render mode" using another script called "renderer.py". I want to do this since I want to run this simulation for 100 times and as I said, I want to stop it upon reaching a condition in every simulation. 
Here's how my game logic looks like.

Thanks in advance!
It's very simple, you just have to connect a Game Actuator to your script Controller and set it to "Quit Game".

Add this actuator to your script by doing this:

gameactu = cont.actuators['Game']

if posdiff &lt; 0.0001: # You can also try 0.0002
    cont.activate(gameactu) # I just try it works.


Here a picture:



You can do this without the Actuator, see the manual.