面向人类的python cli脚本

captain的Python项目详细描述


简单的python cli脚本,适合那些只想完成任务的人。

用法

一个有效的captaincli脚本只需要两件事:

  1. 一个main函数

    defmain(foo,bar):return0
  2. P>使用{TT3}$

    调用退出
    importcaptaindefmain(foo,bar):return0captain.exit(__name__)

就这样!在main函数中定义的任何参数都将 是命令行上的选项。上尉的剧本和其他剧本一样 其他python命令行脚本,因此要运行上面的示例,可以 做:

$ python path/to/script.py --foo=1 --bar=2

参数装饰符

captain.decorators.arg()decorator提供了一个很好的passthrough 全部API argparse模块if 您需要真正自定义参数如何传递到脚本中:

fromcaptainimportexitfromcaptainimportechofromcaptain.decoratorsimportarg@arg('--foo','-f')@arg('arg',metavar='ARG')defmain(*args,**kwargs):'''this is the help description'''echo.out(args)echo.out(kwargs)exit(__name__)

会打印这样的帮助字符串:

usage: script.py [-h] [--foo FOO] ARG

this is the help description

positional arguments:
  ARG

optional arguments:
  -h, --help         show this help message and exit
  --foo FOO, -f FOO

如果你想用另一种漂亮的方式来定义参数,可以看看 docopt

回声

这个小模块使您可以在 在以下情况下仍然可以通过配置记录器来完全控制 你必须这么做。它还将遵守全局--quiet标志。

fromcaptainimportechovar1="print"var2="stdout"echo.out("this will {} to {}",var1,var2)var2="stderr"echo.err("this will {} to {}",var1,var2)e=ValueError("this will print with stacktrace and everything")echo.exception(e)

echo模块有很多不错的小助手特性,但是船长 也可以使用模块,如 clint如果你需要做更多 高级cli输出。

示例

典型的标准python cli脚本

importargparseif__name__==u'__main__':parser=argparse.ArgumentParser(description='fancy script description')parser.add_argument("--foo",action='store_true')parser.add_argument("--bar",default=0,type=int)parser.add_argument("args",nargs='*')args=parser.parse_args()

会变成:

importcaptaindefmain(foo=False,bar=0,*args):'''fancy script description'''return0captain.exit(__name__)

子命令

captain支持脚本中定义的多个子命令,使用 格式化main_subcommand

# cli.pyimportcaptaindefmain_foo():passdefmain_bar():passcaptain.exit(__name__)

因此foo可以使用以下方法调用:

$ python cli.py foo

并且bar可以使用以下方法调用:

$ python cli.py bar

在另一个包中嵌入队长

如果希望包中的脚本可以同时使用 python -m example可能还有一个console_scripts入口点,您 可以设置包的__main__.py模块,如下所示:

# example/__main__.pyfromcaptainimportexitdefmain():pass# hook for setup.py entry_pointsdefconsole():exit(__name__)# hook for python -m MODULE callif__name__=="__main__":console()

然后在setup.py脚本中添加:

entry_points={'console_scripts':['example = example.__main__:console'],}

就这些了。

目录中所有船长脚本的简单列表

您可以通过运行 没有争论的船长:

$ captain

安装

使用pip:

$ pip install captain

最新和最棒的:

$ pip install --upgrade "git+https://github.com/Jaymon/captain#egg=captain"

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

推荐PyPI第三方库


热门话题
对Java中的“this”操作符感到困惑   java更改Libgdx按钮外观   java返回到上一个开关案例   java返回带有可选对象的完全未来列表   java应该只在更新JPA中的整个实体时使用“合并”吗?   java如何将x个整数拆分为y个数组?   java HQL多where子句   java类“org.apache.activemq.jms.pool.PooledConnectionFactory”的哪个属性应该用于超时连接请求?   java运行servlet程序   JavaSpring数据JPA/REST更新子集合   eclipse工具,用于从源代码中提取java类层次结构和调用图(使用api)   java如何在Eclipse中打开Tomcat的自动重启?   java使用并发包中的同步器。FutureTask始终返回null   java Spring Boot@ExceptionHandler隐藏异常名称   java无法访问ActivityCompatApi23类文件   忙时无法将Java窗口置于最前面   java Play Framework 2.5.12从调用中获取方法