Command line apps
Back in the day, I used to want to use twisted.python.usage for all of my command-line apps. It’s a fairly nice API & a good way of writing code.
Since I started writing Bazaar plugins though, I’ve fallen in love with Bazaar’s command interface. Jamu has too, so he wrote Commandant. I don’t really understand it though, which is mostly for lack of trying.
Michael turned our internal EC2-using testing tool into a bzr-a-like app using the Bazaar APIs. There’s a bit of duplication, but it works pretty well.
The Bazaar developers are aware that their command-line interface code rocks and that it’s too closely bound to Bazaar. I’m not sure whether anyone has filed bugs about it or not, but here’s what I actually want:
- The subcommand interface, e.g. “bzr foo”
- Option parsing
- Help
- Command aliasing
- Error handling
- Progress display
- Verbosity control
- Logging
- Debug helpers (e.g. The way bzr handles Ctrl-\)
There’s also a bunch of cool stuff in Bazaar that’s useful for a lot of applications, command-line or not.
- Registries
- Transports
- Hooks
- Configuration files
- Oh yeah, plugins. (How could I have forgotten this?)
Sometimes I wish projects like Bazaar and Twisted split this sort of stuff out into separate packages. That would probably change the way the packages are maintained, and I don’t know whether it would be for better or for worse.
Sadly, no moral or action for this post. Just stuff that’s been on my mind that I wanted to write down and publish. I’d very much welcome input.
Update: Was rewriting this post, then realized that, umm, well, it was a rewrite.