1
0
Fork 0
digitalstudium.com/content/en/python-programming/how-to-easily-write-linux-c...

2.9 KiB
Raw Blame History

title date
Python: How to easily write a CLI tool for Linux using Fire 2023-04-09

I want to share the easiest way I know to write a CLI tool for Linux administration using python and Fire.

Step 1: Install Fire

pip install fire

Step 2. Create a simple CLI tool

Here is an example of a CLI tool that prints the Linux version to the terminal:

#!/usr/bin/env python3
import fire
import platform


class SysInfo:
     """A CLI tool for getting system information about Linux server"""

     def kernel(self):
         """A method for getting kernel version"""
         version = platform.release()
         return f"Kernel version: {version}"


if __name__ == "__main__":
     obj = SysInfo()
     fire.Fire(obj)

Paste this code into a file called my-cli-tool and give it permission to execute:

chmod +x my-cli-tool

Then put this file in the path /usr/local/bin:

sudo cp ./my-cli-tool /usr/local/bin

To use this tool, just type the command:

my-cli-tool kernel

You will see output like this:

 my-cli-tool kernel
Kernel version: 6.2.2-060202-generic

As you can see, it is enough to create a class, a method(s) in it, and pass the class object to the fire.Fire() function - and the cli tool is ready! This will automatically generate a help page, which can be called using the --help flag:

my-cli-tool --help

You will get this output:

NAME
     my-cli-tool - A CLI tool for getting system information about Linux server

SYNOPSIS
     my-cli-tool COMMAND

DESCRIPTION
     A CLI tool for getting system information about Linux server

COMMANDS
     COMMAND is one of the following:
       kernel
         A method for getting kernel version

Making the tool more complex

For example, we also want our tool to be able to print the kernel version in short form, like this: 6.2.2. We rewrite the code as follows:

#!/usr/bin/env python3
import fire
import platform


class SysInfo:
     """A CLI tool for getting system information about Linux server"""

     def kernel(self, format: ("short", "full") = "full"):
         """A method for getting kernel version"""
         version = platform.release()
         if format == "short":
             return version.split("-")[0]
         return f"Kernel version: {version}"


if __name__ == "__main__":
     obj = SysInfo()
     fire.Fire(obj)

Now we can type the following command:

my-cli-tool kernel --format short

Output:

6.2.2

This will also automatically update the help page, adding the --format flag and its possible values:

my-cli-tool kernel --help

Output:

NAME
    my-cli-tool kernel - A method for getting kernel version

SYNOPSIS
    my-cli-tool kernel <flags>

DESCRIPTION
    A method for getting kernel version

FLAGS
    -f, --format=FORMAT
        Type: ('short', 'full')
        Default: 'full'