使用自动shell自动完成功能快速创建可读、用户友好的cli界面的工具包

supercli的Python项目详细描述


supercli是一个小工具包,可以快速创建可读的、用户友好的 cli接口(+autocomplete)

(构建在内置argparse/日志模块之上)



这个项目是围绕我发现自己在重复的任务而构建的 每次我创建一个cli接口。除了自动完成脚本 一代人,这个项目很少提供在其他地方不可用的功能 而不是把几个现有的选项粘在一起,以便快速地启动和运行。

\u警告:这在alpha中仍然非常重要,一些参数将发生变化。



images/coloured_argparse.pngimages/coloured_logging.png





Features

argparse tweaks

  • 自动生成zsh自动完成脚本(支持子服务器)
  • 帮助行中的structuredText语法突出显示
  • 帮助热线中可以使用换行符和ANSI颜色(在Windows上也是如此)
  • 默认情况下启用日志记录(重新编译)(如果已经存在,则重新使用)
  • 内置参数(--help(-h),--verbose(-v),--very-verbose(-vv),--fullhelp
  • 内置隐藏参数(--pdb,--devlog,--gen-autocomp,--default-parser
  • 如果需要,可以启用扩展的日志记录选项集(--logfile,--log-longfmt,--silent
  • 一个命令有多个标志时为1X元变量 (-f,--file [METAVAR]而不是-f [METAVAR] --file [METAVAR]
  • 参数标志的颜色是white,以便从它们的描述中脱颖而出。

logging tweaks

  • 彩色编码日志记录(在windows上也是)(借用stackoverflow上的unutbusorin
  • 一些有用的日志过滤器(从stackoverflow上的unutbusorin借用)
  • 如果已经构建在交互式Python外壳中,则重用现有的日志处理程序。
  • 基于短字符串的参数,用于快速修改日志详细信息/logformat

Usage

QuickStart

这是创建与 以上格式:

importsupercli.argparseparser=supercli.argparse.ArgumentParser(autocomp_cmd='myprogram',## name of command autocompletions are generated fordescription='This descriptions can have `ReStructuredText` in it.',)
myprogram --gen-autocomp   ## create ZSH autocompletion script in current dir

argparse

这只是实模的子类集合, 用法基本相同。

importsupercli.argparsefrompygments.lexersimportHtmlLexerfrompygments.formattersimportTerminal256Formatterparser=supercli.argparse.ArgumentParser(autocomp_cmd='myprogram',## name of command autocompletions are generated fordescription='This descriptions can have `ReStructuredText` in it.',helpline_lexer=HtmlLexer,## use a different lexer or formatterhelpline_formatter=Terminal256Formatter,#  if you'd likeextended_logopts=True,## enable flags for log options related to#  logging to filesdeveloper_opts=True,## make `invisible` dev commands visible in#  help menu for usersloghandlers=None,## if logformat or loghandlers don't suit your needs#  you can manage and pass your own formatted#  loghandlers.#  (-v|-vv) flags will stil work)

logging

如果愿意,也可以独立于 argparse模块。又一次,这里没有什么新鲜事或令人兴奋的事, 这纯粹是方便。

loglevel/logformat

第一个参数str_arg是更改日志级别的简写方法 和日志格式。

importsupercli.loggingimportlogginglogger=logging.getLogger(__name__)## loglevelsupercli.logging.SetLog('')## log to stderr (using loglevel==logging.INFO by default)#  each logrecord is prefixed by the datetimesupercli.logging.SetLog('i')## loglevel==logging.INFOsupercli.logging.SetLog('w')## loglevel==logging.WARNINGsupercli.logging.SetLog('v')## loglevel==logging.DEBUGsupercli.logging.SetLog('vv')## loglevel==logging.DEBUG and disable all logfilters## the long waysupercli.logging.SetLog(lv='INFO')## logformatsupercli.logging.SetLog('d')## (developer) instead of datetime, display __name__ and line-numbersupercli.logging.SetLog('l')## each log-entry takes 2x lines (full import-path & func, time, lineno, etc)## these can be combinedsupercli.logging.SetLog('dv')## (developer) and (verbose) flags are both active

logfile

99.9%的时候,当我想登录到一个文件时,我想使用一个RotatingLogHandler。 我猜大多数人都是这样,所以这是默认的行为。

importsupercli.loggingimportlogginglogger=logging.getLogger(__name__)supercli.logging.SetLog(lv='INFO',logfile='/path/to/myfile.log',logstream=False,## optionally, disable logging to STDERRlogfile_size=1000000,## =~8mbdebug_mode=False,## this module is peppered with print() statements#  to assist in debugging. This displays them.)

logfilters

logfilters允许您根据某些信息筛选日志记录。 在supercli.logging中有两个日志筛选器,但任何logging.Filter 子类将工作。

默认情况下,SetLog()设置为使用supercli.logging.BlackList作为过滤器。 每个记录都与调用函数的import path+函数名匹配。

示例:

fnmatch.fnmatch(filter_value,'*{import_path}.{function_name}*')
fromsupercli.loggingimportSetLog,Blacklistimportlogginglogger=logging.getLogger(__name__)SetLog(lv='INFO',logfile='/path/to/myfile.log',logstream=True,filter_matches=['sqliface.','chatty.module.func'],## filters records matching#   '*sqliface.*',#   '*chatty.module.func*'filter_type=Blacklist,## BlackList is the default)

Todo

  • 测试
  • bash自动完成脚本
  • (zsh)完成类型(_file,_netkiface,…)
  • LI>需要更灵活的处理像玛雅这样的环境。 (我假设所有的autodesk产品都有自己的日志处理程序 脚本编辑器等)
  • 让logging.whitelist像黑名单一样工作。
  • 白名单和黑名单需要e可以一起使用
  • 在图片中显示命令的更通用用法。

Thanks

  • colorama作者用彩色文本填充cmd.exe,而不是用彩色语言填充房间。
  • stackoverflow用户unutbusorin使用windows颜色/日志过滤器解决方案。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
windows请帮助获取java。运行程序时发生lang.nullpointerexception   JPA标准中的错误:java。lang.IllegalArgumentException:此JPQLquery中没有名为“:inputMsgId_1_”的参数   java调度一个小程序,从ScheduledExecutorService开始   java点击AVD“创建设备”按钮抛出NullPointerException   缓存Java9WebStart会多次加载jar文件   使用java计算最小二乘   当代理关闭时,java kafka生产者不会抛出异常   我们什么时候以及为什么要在java中进行自定义序列化?   java使用GSON解析包含包含所需字符串的对象的对象数组   java如何使用BOBJ REST API实现分页?   java身份验证失败:用户的凭据已过期。CAS v4。2.   合并排序中的java无限循环?   java jackson xml将pojo子元素转换为字符串   tcp Java ObjectOutputStream重置错误   如何调用。bat文件,并使用java中的ProcessBuilder发送字符串   奇怪的Java数学结果   java如何在Android中禁用最近的活动按钮?   java刷下应用程序崩溃   使用Java收集所有VersionOne资产及其所有属性   Java打印:创建具有最小可接受边距的页面格式