开发python命令行工具包

156 阅读2分钟

选择一个包名

比如你想在终端输入funy时就执行相关指令,这个时候funy就是你的包名

  • 全小写
  • 不要和电脑上已有的包名重复(比如你电脑上有git了, 你的包名就不能再叫git
  • 使用下划线分隔单词或者什么都不用(不要使用连字符)

目录结构

funy/
    bin/
        funy
    funy/
        __init__.py
    setup.py
  • 最外层的目录是我们版本管理工具的根目录, 例如 funy.git .
  • 子目录也叫 funy(也就是你的python包) , 代表Python module.
  • bin目录下funy也是python文件,不过需要把.py后缀给去掉
    • 这个文件主要是解析我们在命令行输入的各种参数信息的
    • 代码如下所示
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
import argparse

version = "v1.0.0"
parser = argparse.ArgumentParser(description="funy 命令行工具 {}".format(version))
parser.add_argument("-v", "--version", help="版本号", action="store_true")
parser.add_argument("-p", "--print", help="大写字符转换")
args = parser.parse_args()
if len(sys.argv) == 1:
    parser.print_help()
if args.version:
    print(version)

创建包文件里面的具体代码逻辑

funy/
    bin/
        funy
    funy/
        __init__.py
        funy.py
    setup.py
  • funy.py代码内容
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

def print_args(str):
    print(str.upper())

编写bin/funy文件

  • 导入包文件
from funy import funny
  • 调用包文件的函数
funny.print_args(args.print)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
import argparse
from funy import funny // 导入包文件
version = "v1.0.0"

parser = argparse.ArgumentParser(description="funy 命令行工具 {}".format(version))
parser.add_argument("-v", "--version", help="版本号", action="store_true")
parser.add_argument("-p", "--print", help="大写字符转换")
args = parser.parse_args()
if len(sys.argv) == 1:
    parser.print_help()
if args.version:
    print(version)
if args.print:
    funny.print_args(args.print) // 调用包文件里面的内容

文件依赖

如果你开发一个正常的python包,那就不可能只是用一个python文件开发的,会写多个文件和使用三方的包 我们再新建一个文件用于打印绿色的字符串

目录结构如下

funy/
    bin/
        funy
    funy/
        __init__.py
        funy.py
        green.py
    setup.py
  • green.py代码内容
GREEN = "\033[92m"
END = "\033[0m"
def green(msg):
    print(GREEN + msg + END)
  • funy.py代码内容
    • 导入依赖的其他python文件
    from .green import green
    
    • 调用函数
    green(str)
    
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from .green import green // 导入头文件

def print_args(str):
    print(str.upper())

def print_green_args(str):
    green(str) // 调用方法

修改bin/funy文件内容

  • bin/funy代码内容
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
import argparse
from funy import funny
version = "v1.0.0"

parser = argparse.ArgumentParser(description="funy 命令行工具 {}".format(version))
parser.add_argument("-v", "--version", help="版本号", action="store_true")
parser.add_argument("-p", "--print", help="大写字符转换")
parser.add_argument("-pg", "--print_green", help="大写字符转换")
args = parser.parse_args()
if len(sys.argv) == 1:
    parser.print_help()
if args.version:
    print(version)
if args.print:
    funny.print_args(args.print)
if args.print_green:
    funny.print_args(args.print_green)

到此为止我们就完成了代码的开发了

setup.py 文件的编辑

from setuptools import setup, find_packages

setup(
    name="funy", // 包名
    version="1.0.0", // 包版本
    include_package_data=True,
    packages=find_packages(),
    install_requires=[
        "frida", // 需要安装的第三库
    ],
    scripts=['bin/funy'], // 终端脚本
)

安装

setup.py文件所在的目录下,执行下面命令

python3 setup.py install

完成后就可以在终端命令行中使用

funy -v
v1.0.0