clap是用于命令行和子进程脚本开发的工具。
clasp的Python项目详细描述
关于
clap(命令行和子进程)扩展了click(https://palletsprojects.com/p/click/) 并提供一个函数库,帮助开发命令行 需要频繁调用系统可执行文件的工具。特殊结构 程序[选项]命令参数[选项]已实现 设置读取和写入配置文件和组命令的简单方法 允许有组织地开发命令行工具套件的程序。
安装
pip install clasp
用法
命令行程序具有以下结构:
"""template file.""" from __future__ import print_function import clasp.click as click import clasp.click_ext as clk @click.group() @clk.shared_decs(clk.main_decs) def main(ctx, config, outconfig, configalias, inputalias): """template file for script development.""" clk.get_config(ctx, config, outconfig, configalias, inputalias) @main.command('XXX') @click.argument('arg1') @click.option('--opts','-opts', is_flag=True, help="check parsed options") @click.option('--debug', is_flag=True, help="show traceback on exceptions") @click.pass_context def XXX(ctx, arg1, **kwargs): """ docstring with full help text for command """ if kwargs['opts']: kwargs['opts'] = False clk.echo_args(arg1,**kwargs) else: try: ########## #code body ########## except click.Abort: raise except Exception as ex: clk.print_except(ex, kwargs['debug']) return 'XXX', kwargs, ctx @main.resultcallback() @click.pass_context def printconfig(ctx, opts, **kwargs): """callback to save config file""" try: clk.tmp_clean(opts[2]) except Exception: pass if kwargs['outconfig']: clk.print_config(ctx, opts, kwargs['outconfig'], kwargs['config'], kwargs['configalias'])
在设置中设置入口点:
entry_points={"console_scripts":'program=package.program:main'}
然后执行:
program XXX arg1 [options]
启用选项的自动完成功能:
_PROGRAM_COMPLETE=source program > bash_complete.sh # put this in .bash_profile (with path) source bash_complete.sh
脚本
有关匹配已解析参数的有用函数,请参阅脚本工具文档 使用ipyparallel调用函数、调用子进程和并行处理 本地和通过ssh。
回调
除了click提供的强大的选项解析之外 回调是clap的一部分,它有助于分析常用的参数
文件输入
文件输入可以使用通配符扩展(使用引号,以便回调处理) 使用glob加上以下各项:
- [abc] (one of a, b, or c)
- [!abc] (none of a, b or c)
- ‘-‘ (hyphen) collect the stdin into a temporary file (clasp_tmp*)
- ~ expands user
文件输入回调是:
- parse_file_list: returns list of files (raise error if file not found)
- is_file: check if a single path exists (prompts for user input if file not found)
- are_files: recursively calls parse_file_list and prompts on error
- is_file_iter: use when multiple=True
- are_files_iter: use when mulitple=True
- are_files_or_str: tries to parse as files, then tries split_float, then split_int, then returns string
- are_files_or_str_iter: use when mulitple=True
字符串分析
- split_str: split with shlex.split
- split_str_iter: use when multiple=True
- color_inp: return alphastring, split on whitespace, convert floats and parse tuples on ,
数字解析
- tup_int: parses integer tuples from comma/space seperated string
- tup_float: parses float tuples from comma/space seperated string
- split_float: splits list of floats and extends ranges based on : notation
- split_int: splits list of ints and extends ranges based on : notation
文档
单击和sphinx_单击使帮助和文档变得超级简单,但是 为–help和sphinx格式化docstring时有一些冲突。 clap.sphinx_click_ext尝试解决这些冲突并对选项进行排序 并根据上面显示的脚本模板显示帮助。与狮身人面像一起使用 在conf.py中的扩展名中添加“clap.sphinx_click_ext”
- 热门话题
- Java:字符串。RTL设备语言用标志“+”格式化,数字后加符号 java GAE作为桌面应用程序(Swing)的服务提供商 java将InputStream转换为FileInputStream不适用于Apache POI java外部Voronoi库“网格”:什么是草图和处理? 重载重写的泛型方法java java显示组织上设置的错误。springframework。验证。jsp中的错误对象 java一些Spring模型属性没有显示在我的JSP中 java无法编译Guava 23的SimpleTimeLimiter示例 java如何更改JTree中的“根”目录名? java如何在安卓中对相对布局产生连锁反应? java错误:org。冬眠例外SQLGrammarException:无法提取结果集,dateAccessed是未知列 如何使用java监听JSON文件更新 由抽象封闭类创建的匿名内部类能否通过反射确定实现类?