Command-Line programs can have a lot to them - usually more than you think, yet often suffer from a lack of thought.
This is a tour through how to structure your code, tools in the standard library and some 3rd party libraries. Take your command-line programs to the next level!
Python is a great language for writing command-line tools - which is why so much of Linux is secretly written in Python these days. Unfortunately, what starts as a simple script can quickly get out of hand as more features are added and more people start using it!
The talk will consist of a tour through various useful libraries and practical code showing how each can be used, and include advice on how to best structure simple and complex command-line tools.
Things to consider when writing command-line apps:
- Single-file vs Multiple-file
- Standard library only vs. 3rd party requirements
- Installation - setup.py vs. native packaging
The different parts of a command-line program:
- Option Parsing:
- Libraries: getopt, optparse, argparse, docopt
- Formats: Ini file, JSON, YAML
- Where should it be stored (cross-platform);
- Having multiple configuration files, and allowing user config to override global config
- Colour - colorama
- Formatting output for the user
- Formatting output for other programs
- How do you know when your output is being piped to another program?
- Managing logging and verbosity
- Managing streamed input
- Exit values: What are the conventions?
- Interactive apps - REPL
- Structuring a bunch of programs/commands around a shared codebase.
- Command-line frameworks: clint, compago & cliff
- Testing command-line apps
- Writing command-line tools in Python 3 vs Python 2