python命令行映射器

sh2p的Python项目详细描述


#sh2py是一个shell到python的命令行映射器。换句话说,这是向shell公开python函数的最简单方法。主要特点:

*代码非常小。一个python模块。大约一百行代码。
*公共api由python类commandlinemapper组成;再加上两个
方法:"add"和"run"。
*没有外部依赖关系。
*支持python 2和3。

考虑下面的代码片段。

``python
from sh2py import commandlinemapper

打印(arg1)
打印(arg2)
打印(arg3)

实例化"commandlinemapper"。

2.使用"commandlinemapper.add"方法注册要公开的函数。


3。调用"commandlinemapper.run"。它将处理命令行
``sys.argv`,并调用匹配函数。

arg3='val3')`。几个音符。只有一个函数通过"commandlinemapper.add"公开,因此可以从命令行中省略它的名称。如果公开多个函数,建议将其名称作为第一个程序参数传递,否则将调用第一个公开的函数。见下一节。没有类型验证/强制。**run**方法只在实际函数调用时传递
字符串。

为每个要处理的命令创建
一个函数,并用"commandlinemapper.add"注册所有这些函数。考虑下面的代码。

``python
from sh2py import commandlinemapper

pass

如果name_uu=''uu main:
cli=commandlinemapper()

cli.add(subcommand2)

cli.run()
````

则可以通过命令行指定要运行的函数。例如,若要使用参数"val1"和"val2"调用"subcommand2",请键入以下内容。



请注意,"subcommand2"项本身是从参数
行提取的。该行的其余部分照常处理。在本例中,`args2`
是`['val1','val2']`。


commandlinemapper

def hello(case='',shuffle='no',space='0'):
''
发出"你好,世界!"关于标准错误的问候语。


用法:

python hello.py[case=upper/lower][shuffle=yes/no][pace=0]


自变量:

help,打印此用法帮助并退出;
case=upper/lower,将消息转换为大写或小写;
shuffle=yes/no,对消息的字母进行无序处理;
pace=0,显示字母的速度,单位为毫秒。

而且,速度是
零,所以整个消息会立即显示在标准错误上。
'


']和shuffle in['yes','no']:
如果space.isdigit():
greet=['hello','world']
delay=int(pace)

如果shuffle==yes':
greet[0]=''。加入(示例(greet[0],len(greet[0]))
greet[1]=''.join(sample(greet[1],len(greet[1]))

greet='{},{}!'.format(*greet)

如果case='大写':
greet=greet.upper()

elif case='小写':
greet=greet.lower()

如果delay==0:
打印(greet,file=stderr)

否则:
对于x in greet:
strderr.write(x)


strderr.flush()


sleep(delay/1000.0)


print(file=strderr)

return halt

else:
returnhalt

如果cli.run()是halt:



但是
**docstring**表示不同。"help"参数将自动识别
,使用时将打印默认"hello"函数的**docstring**。
如果函数不提供
**docstring**,则将打印默认帮助文本。

使用无效语法调用。您的函数也可以使用它来指示错误
条件。这允许程序以非零状态退出,或触发一些错误处理函数。


有很多python命令行解析工具支持posix。试试其中一个。

*argparse/optparse/getopt。内置于python中。复杂。
*[compago](https://github.com/jmohr/compago)。很好,但未维护。另外,不在python 3上运行。
*[docopt](http://docopt.org/)。
*[clint](https://github.com/kennethreitz/clint)。
*[单击](http://click.pocoo.org/3/)。

q.i需要类型强制。

a.自己实现它,或者使用一些第三方库。

q.i可以使用python本身作为命令行解释器。为什么会这样?

a.可以。在这种情况下,所有这些都变得无关紧要。我不喜欢,
这是我编写此工具的原因之一。另一个原因是其他的事情都太复杂了。ymmv.

q.为什么不直接使用"sys.argv"。

a.好问题。我经常这样做。实际上,如果脚本足够小,并且需要零个、一个或两个位置参数,则不需要命令行处理工具。编写几个条件,并在出现错误时打印一条简单的帮助消息。

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

推荐PyPI第三方库


热门话题
java向嵌入式Jetty添加多个端点   java如何在JAXWS处理程序中区分请求和响应?   使用Scenebuilder for JAVAFx的登录应用程序的java MVC体系结构   java对话框将不显示   Windows 7上的Java系统变量   java删除动态添加的面板   java将Javadoc嵌入到HTML网站中   带有URL编码数据的java Spring RestTemplate POST请求   java JAXR只运行一次函数   HttpClient缺少java依赖项   java深层反射比较   基于javarmi和CORBA的分布式计算   如何使用当前数据库时间从Java更新MongoDB?   java通过光标保存数据调试时显示错误数据