After spending considerable amount of time on a computer as a developer, the GUI starts to seem amazingly slow and you realize just how awesome command line tools can be. Especially if you follow the Unix philosophy of “one tool for one task”, you can quickly chain together multiple in-built tools and quickly accomplish most tasks without a single line of code.
However, what about when the tool you need doesn’t exist? Wouldn’t it be great to just create it? In this post, I’d like to show you how using Python. My reason for using python instead of the more native C/C++ is simple: easy to read code for even anybody new to programming to understand the basic structure, fast prototyping, a rich set of tools, and the general ease of use. You’re of course welcome to use other languages such as Ruby (I’ve seen a lot of great tools written in Ruby), but then you wouldn’t be reading this post, would you? Without further ado, let’s begin!
I faced a problem a couple of weeks ago where I needed a simple command to nuke a directory in order to rebuild some binaries and unfortunately no tool existed for this at the time. Hence I created nuke, a convenient command line tool that does exactly what it says, nuke directories.
To start, we create a project directory called
nuke-tool, we create a directory called
nuke and inside that directory, two files,
nuke.py which will house all our main code logic and
__init__.py so that python is able to understand this is a package called
In the root of the project directory, we should also create a file
test_nuke.py to create tests for our code. Don’t want to accidentally nuke something else now, do we? We also create a file called
setup.py to aid
pip in installing
nuke. We’ll flesh these out one at a time.
I did mention a rich set of libraries to help us out in this process. I personally use
argparse to help with argument parsing and
clint from the awesome Kenneth Reitz to help with output text formatting and confirmation prompts (simple Yes/No prompts). Later on, you’ll see code snippets showing these libraries in action.
In any command line tool, the first thing we need is a way to parse command line arguments. It’s the arguments you pass to a command which are separated by spaces. For example,
grep takes two arguments, a pattern and a file name
grep main nuke.py.
In python, we can easily use the
argparse module to help us create a simple argument parser. I wanted to provide two options to the user, an argument specifying the directory to nuke (with the default being the current directory), and a flag
-y to override the confirmation prompt. The code to do this is:
import argparse import os . . . def _argparse(): parser = argparse.ArgumentParser("nuke") parser.add_argument("directory", nargs='?', default=os.getcwd(), help="Directory to nuke! Default is current directory") parser.add_argument("-y", help="Confirm nuking", action="store_true") args = parser.parse_args() return args