Python: How to easily write a CLI tool for Linux using Fire
๐ง By: Konstantin Shutkin
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
Step 3. 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'
Step 4. Create a binary file
First install pyinstaller
:
pip install pytinstaller
Then we run the command:
pyinstaller my-cli-tool --onefile
A folder dist
should appear, and a binary file my-cli-tool
inside it with all dependencies, which can be used even on servers, which do not have python or fire installed. Just put this file in the path /usr/local/bin
and my-cli-tool
can be used!