Hi Andrew,
I haven't tried, but I think you do something like this
def custom_schedule(iteration, wall_time, sim_time, timestep):
# Write a function here that returns true based on arguments iteration (int), wall_time (double), sim_time (double)
# and timestep (double) if you want to trigger an output, and false otherwise
and then
handler = solver.evaluator.add_file_handler('handler_name', custom_schedule=custom_schedule)
If you start with Daniel's suggestion you will probably see how to define custom_schedule to integrate it into the evaluator framework.
Hope it helps,
Calum