用Python写命令吧

简介: 用Python写命令吧

commandflow

使用Python生成命令行

🍕 安装

pip install commandflow

🎉 快速开始

from commandflow import Command
class MyCommand(Command):
    exe = 'fastp'
    def input(self, filename):
        self.set_action('f', 'file', value=filename)
if __name__ == '__main__':
    command = MyCommand()
    command.input('test.file')
    print(command.command)  # fastp --file test.file

✨文档

设计动机

  1. 在进行生信分析时,往往会使用很多分析软件,当串联一个完整的分析流程时,需要编写大量的shell脚本,这很不优雅。
  2. 我不喜欢写shell。

层次结构

fd35c5bcb3f4382b2ceb76cc9a92fba7_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

from commandflow import Command
class MyCommand(Command):
    exe = 'bwa'  # 指定可执行程序

或者也可以通过set_exe()来指定可执行程序

from commandflow import Command
class MyCommand(Command):
    exe = 'bwa'  # 指定可执行程序
c = MyCommand()
c.set_exe('bwa')

添加参数

是有set_action()来添加参数到最终的命令行中

from commandflow import Command
class MyCommand(Command):
    exe = 'bwa'
    def input(self, filename):
        self.set_action(
            'f',
            'file',
            value=filename
        )
c = MyCommand()
c.input('test.docx')

set_action()可以接收多个参数

- short_arg_name: 短参数名  -f
- long_arg_name: 长参数名  --file
- value:参数值
- help:对该条参数的解释说明
- positional:使用是一个位置参数,默认放到最后
- sep:当传递的value是一个list的时候,所指定的连接符,默认为空格
- stdout:命令是否需要指定标准输出

value可以为intfloatstrlist类型的值,当value是一个list类型的值时,会通过sep连接起来,如当sep为空格时,[1, 2, 3]会被拼接为1 2 3,这对某些接收多个参数值的参数非常有用。

获取最终的命令行

from commandflow import Command
class MyCommand(Command):
    exe = 'bwa'
    def input(self, filename):
        self.set_action(
            'f',
            'file',
            value=filename
        )
c = MyCommand()
c.input('test.docx')
print(c.command)  # bwa --file test.docx

当相同的参数值被多次设置参数时,后面设置的会将前面设置的覆盖

c = MyCommand()
c.input('test.docx')
c.input('apple.docx')
print(c.command)  # bwa --file apple.docx

生成多个命令行

上面的方式只能生成一条命令,但实际应用中可能会涉及到需要生成多条命令,彼此之间只是参数值不同

使用record()记录需要生成的命令,并通过records来获取所有记录的命令

c = MyCommand()
for file in ['1.docx', '2.docx', '3.docx']:
    c.input(file)
    c.record()
print(c.records)  # ['bwa --file 1.docx', 'bwa --file 2.docx', 'bwa --file 3.docx']

将所有命令重置(删除所有参数)

c = MyCommand()
c.clear()

更改参数前面的前缀

有些软件中,可能参数名前面不是---,比如某些参数名并不是双短线跟着长参数名,而是短短线跟着长参数名,如-file test.docx。可以在继承的类中通过添加long_dash来声明长参数名的前缀,short_dash来声明短参数名的前缀。

from commandflow import Command
class MyCommand(Command):
    long_dash = '-'
    short_dash = '-'
    exe = 'bwa'
相关文章
|
29天前
|
安全 网络安全 文件存储
思科设备巡检命令Python脚本大集合
【10月更文挑战第18天】
66 1
思科设备巡检命令Python脚本大集合
|
1月前
|
Python
Python PDB命令介绍
【10月更文挑战第15天】 使用PDB的方式有两种,其中一种是在脚本中添加代码,不觉得这种方式比print好在哪里,所以这种方式此文不表。这里我们只学习PDB的命令行使用方式
42 4
|
1月前
|
机器学习/深度学习 缓存 PyTorch
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
这篇文章是关于如何下载、安装和配置Miniconda,以及如何使用Miniconda创建和管理Python环境的详细指南。
388 0
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
|
2月前
|
机器学习/深度学习 Shell 开发工具
Python使用管道执行git命令报错|4-7
Python使用管道执行git命令报错|4-7
|
1月前
|
机器学习/深度学习 缓存 Linux
python环境学习:pip介绍,pip 和 conda的区别和联系。哪个更好使用?pip创建虚拟环境并解释venv模块,pip的常用命令,conda的常用命令。
本文介绍了Python的包管理工具pip和环境管理器conda的区别与联系。pip主要用于安装和管理Python包,而conda不仅管理Python包,还能管理其他语言的包,并提供强大的环境管理功能。文章还讨论了pip创建虚拟环境的方法,以及pip和conda的常用命令。作者推荐使用conda安装科学计算和数据分析包,而pip则用于安装无法通过conda获取的包。
74 0
|
2月前
|
Unix Shell Linux
nohup python -u ai_miniprogram_main.py > ../iwork.out 2>&1 & 这句命令是做什么的?
nohup python -u ai_miniprogram_main.py > ../iwork.out 2>&1 & 这句命令是做什么的?
20 1
|
2月前
|
Python Windows
Python:执行py命令,提示: Can‘t find a default Python.
Python:执行py命令,提示: Can‘t find a default Python.
|
2月前
|
Shell Linux Python
python执行linux系统命令的几种方法(python3经典编程案例)
文章介绍了多种使用Python执行Linux系统命令的方法,包括使用os模块的不同函数以及subprocess模块来调用shell命令并处理其输出。
38 0
|
3月前
|
API 开发工具 网络架构
【Azure Developer】使用Python SDK去Azure Container Instance服务的Execute命令的疑问解释
【Azure Developer】使用Python SDK去Azure Container Instance服务的Execute命令的疑问解释
【Azure Developer】使用Python SDK去Azure Container Instance服务的Execute命令的疑问解释
|
3月前
|
前端开发 计算机视觉
Building wheel for opencv-python (pyproject.toml) ,安装命令增加 --verbose 参数
Building wheel for opencv-python (pyproject.toml) ,安装命令增加 --verbose 参数
189 2
下一篇
无影云桌面