Because maya is adding the values to the strings before executing them in MEL, you need to pipe it through a shell mel proc which formats it nicely for Python. Also notice the return on the melGetCel. This is so the return of the python getCell makes it back to the table.
I enabled your scriptTable so I could check the cellChanged function. Python needs the quotes surrounding the string of $value when passing it into cellChanged.
[codebox]import maya.cmds as cmds
import maya.mel as mel
mel.eval('global proc string melGetCell(int $row, int $column){$gcCall="getCell("+$row+","+$column+")";$thisCell=python($gcCall)
;return $thisCell;}')
mel.eval('global proc int melCellChanged(int $row, int $column, string $value){$ccCall="cellChanged("+$row+","+$column+",\'"+$value+"\')";python($ccCall);return 1;};')
def getCell( row, column ):
print row
print column
return "test"
def cellChanged( row, column, value ):
cmds.scriptTable( "animationSets", edit=True, clearRow=row )
return True
window = cmds.window(widthHeight=(400, 300))
form = cmds.formLayout()
table = cmds.scriptTable( "animationSets", rows=1, columns=3, label=[(1, "Name"), (2, "Start Frame"), (3, "End Frame")], enable=True, width=400, height=500, columnWidth=[(1,180),(2,70),(3,70)], getCellCmd='melGetCell', cellChangedCmd='melCellChanged' )
addButton = cmds.button(label="Add Row",command="cmds.scriptTable(table, edit=True,insertRow=1)")
deleteButton = cmds.button(label="Delete Row",command="cmds.scriptTable(table, edit=True,deleteRow=1)")
cmds.formLayout(form, edit=True, attachForm=[(table, 'top', 0), (table, 'left', 0), (table, 'right', 0), (addButton, 'left', 0), (addButton, 'bottom', 0), (deleteButton, 'bottom', 0), (deleteButton, 'right', 0)], attachControl=(table, 'bottom', 0, addButton), attachNone=[(addButton, 'top'),(deleteButton, 'top')], attachPosition=[(addButton, 'right', 0, 50), (deleteButton, 'left', 0, 50)] )
cmds.showWindow( window )[/codebox]