使用自动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第三方库


热门话题
java对来自同一基类的不同对象进行迭代   java打印在JtextArea或JtextPane上   java无法使用Play Core库提供的inapp更新支持更新应用程序   javafxgui中关注点的java分离   onPreferenceChange方法中的java奇怪值   lambda调用包含在Java中可选值的列表中?   servlet中的java int值(无法将字符串转换为int)   尽管有终止表达式,java循环仍不会结束   java是否可以通过编程方式启用远程jmx监视?   java如何创建集合的新实例   如何将自定义Java模块更新为JRE映像   java无法点击Chrome和IE11上的自定义复选框   java Here Android SDK在“无车无车”和“无车无车”街道上导航