Opterator needs to be able to distinguish between multiple main methods based on the presence of some option. I am doing a (contrived) example right now for a hockey tournament; it has options like this:
./hockey_tournament.py tournament_name --add_team 'team_name'
./hockey_tournament.py tournament_name --team 'team_name' --add_player 'player_name' --position 'forward|defense|goal'
./hockey_nournament.py tournament_name --start_game 'team1_name' --against 'team2_name' --time_slot 'A'
Encapsulating all that in one main or even one option_parser is, quite simply, messy. If certain options are expected to go together, they can go in different main methods.
I started looking at how best to implement this; its easy enough to implement (simply store a list of option_parsers/main functions), but I realized that it makes automatically, or even manually writing usage strings very difficult. It also makes it hard to display error conditions; if the user supplies an invalid configuration, it might check three main methods, note that they all failed, and output 'invalid configuration' -- it would be hard to tell the user exactly what they did wrong.
Since the example that inspired this issue was contrived, I'm going to wait for more real-world examples to see how I would have or should have used it.