There are a couple ways to do this. Unfortunately, neither is trivial. One way to do this would be to parse the log file. You can access the log file by specifying the name of the log file in the call to solve: results = solver.solve(model, logfile='ipopt_output.log'). You can then open this log file and parse it to get the number of iterations. Alternatively, you could use the interface to CyIpopt with a callback to track the number of iterations.