面向人类的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文件到编译器?   java写入文件和I/O   java日历返回错误的当前日期安卓   if语句if变量等于1(java)   java很难让Joda有时间使用我的bukkit插件   json如何创建基于java的应用程序,该应用程序将从网站获取输入   java如何在多页中打印大型JPanel   java my spinner在添加从firebase数据库中选择的多个值时被覆盖   java用Play框架覆盖HTTP方法   试图获取所有用户时,java错误请求400。Dto和表格   java支持bean加载图像后javascript自动调用JS函数   java在MTOM的@StreamingAttachment(Metro)中,Parsely的意思是什么   具有可抢占线程队列的多线程java执行器   Java Opencv connectedComponentsWithStats   java如何向数组中添加2D数组的数目   eclipse为什么我的Java Zork克隆不能正确循环?   java在哪里放置定制的第二个web。xml   java如何更改最近应用列表中显示的快照?   java Browser#getText()返回空字符串