Skip to content

Writing command line tools

To write a command line tool in Python, open a plain text file named hello.py and enter the following contents

#!/usr/bin/env python3

print('Hello, World!')

Save the file and make it executable with following shell command

% chmod u+x hello.py

Now, you should be able to execute your script from the command line

% ./hello.py
Hello, World!

Command line arguments

Let's assume that you want to write a script to download data from your local XNAT installation. You'll need to accept the command line arguments --hostname, --session, and --output-dir

% ./download.py --hostname xnat.example.com  \
                --session LABEL \
                --output-dir ./output

Python includes a traditional C-style parser getopt, but there's a more convenient way to define and parse command line arguments using argparse.

argparse

defining command line arguments

To define command line arguments, import the argparse module and create an instance of argparse.ArgumentParser

import argparse

parser = argparse.ArgumentParser()

Now you can add your arguments to the parser object by calling parser.add_argument

parser = argparse.ArgumentParser()
parser.add_argument('--hostname')
parser.add_argument('--project')
parser.add_argument('--label')
parser.add_argument('--output-dir')

parsing the command line

To parse the command line arguments entered by the user, simply call parser.parse_args

args = parser.parse_args()

accessing the command line arguments

Each command line argument is automatically converted into a property on the object returned by parse_args(). The name of the property is similar (but not identical) to the name of the argument that was declared. There are two translation rules to remember

  • Remove any leading dashes e.g., - or --, from the argument name
  • Replace any embedded dash - with an underscore _
print(f'host is {args.hostname}')
print(f'project {args.project}')
print(f'label is {args.label}')
print(f'out_dir is {args.output_dir}')