一种可推断的面向行的命令提示符解释器

inpromptu的Python项目详细描述


输入脉冲

自动推断交互式提示的库。在

什么是

Inpromptu几乎是Python内置的cmd.py实用程序的直接替代品。在

由于需要快速与现实世界的设备交互,以及由于手工开销而产生的挫败感命令行,Inpromptu通过利用Python的类型暗示和自省功能自动生成交互式提示会话。功能包括

  • 使用方法的函数签名无缝自动完成制表符
  • 使用方法的docstring自动生成帮助
  • 交互式方法,可以提示用户在方法中的任何位置输入更多信息
    • 可自定义的选项卡完成,可在方法中的任何位置重新配置

什么输入不是

Inpromptu创建一个交互式提示。Inpromptu不是:

  • 命令行接口生成器。请参见argparsepython-fire,或click。在
  • 直接替代api命令行. 有一些细微的差别。看看例子吧。在

要求

  • Python 3.6或更高版本
  • 要转换为交互式提示会话的类必须从Inpromptu对象继承
  • 要作为命令公开给提示会话的方法必须用@cli_method修饰符修饰
  • 所有将成为提示命令的方法都必须提示所有参数类型

示例时间

从文件中的一个类开始,比如test_驱动器.py. 在

classTestDrive(object):def__init__(self):"""initialization!"""self.vehicle_speed=0honk(self):"""beep the horn."""pass@propertyspeed(self):"""return the vehicle speed."""returnself.vehicle_speed

从Inpromptu继承。用@cli_method装饰您的方法。在

^{pr2}$

快跑!在

python3 test_drive.py

这将产生一个提示:

>>>

按tab键两次以显示所有的@cli_method修饰参数。在

honk            speed
>>>
太好了!现在让我们演示论点完成。在

{self}或第一个添加参数的函数。在

@cli_methodadd_fuel(self,gallons:float=0,top_off:bool=False):"""Add fuel in gallons.""    pass

快跑!在

python3 test_drive.py

在提示下开始键入

>>> add_f

按tab键完成任何@cli_method修饰函数。在

>>> add_fuel

在命令之间留出空格,然后按tab键两次。在

gallons=<float> top_off=<False>
>>> add_fuel 

神奇!此时,您可以通过多种方式完成命令的输入。在

>>> add_fuel gallons=10 top_off=False

或者

>>> add_fuel 10 False

或者

>>> add_fuel 10 top_off=False

换句话说,参数可以按名称或位置填充,也可以先按位置填充,然后按名称填充——就像*args和**kwds在普通python函数上的行为一样。在

最后一个演示。可以通过函数签名自动推断制表符完成。但是如果你需要改变它的中间功能来建议用户输入呢?没问题。把它添加到完成列表中

add_specs_from_user(self):"""Add specs from user."""self.completions=["2","4","6"]self.door_count=self.input("How many doors does this vehicle have?")

完成的“制表符”将呈现此列表,当函数完成执行时,该列表将被清除。在

你还在等什么?为什么不试驾一下呢?从顶部目录运行:

python3 -m examples.test_drive

关于作者

Inpromptu是由使用命令行一次太多了。必须有更好的解决办法。。。。在写了Inpromptu之后,有!在

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

推荐PyPI第三方库


热门话题
java Eclipse内存分析器(MAT):不显示当前正在运行的进程   java Apache Velocity:转义字符不能作为关联数组键用于PHP   不截断零的java格式十进制输出   在另一个类文件中调用时返回空值的java getter   java集合获取连接   java解析json使用Gson登录系统应用程序强制关闭   java DelferredResult带有两个请求的ajax请求   java可降低功耗,同时应使用无线   java BoxLayout无法共享错误?   java如何使用计时器制作闹钟   java使用OAuth2保护RESTWeb服务:一般原则   java在一个jframe上显示多个图像和按钮