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.好问题。我经常这样做。实际上,如果脚本足够小,并且需要零个、一个或两个位置参数,则不需要命令行处理工具。编写几个条件,并在出现错误时打印一条简单的帮助消息。
*代码非常小。一个python模块。大约一百行代码。
*公共api由python类commandlinemapper组成;再加上两个
方法:"add"和"run"。
*没有外部依赖关系。
*支持python 2和3。
考虑下面的代码片段。
``python
from sh2py import commandlinemapper
打印(arg2)
打印(arg3)
实例化"commandlinemapper"。
2.使用"commandlinemapper.add"方法注册要公开的函数。
3。调用"commandlinemapper.run"。它将处理命令行
``sys.argv`,并调用匹配函数。
arg3='val3')`。几个音符。只有一个函数通过"commandlinemapper.add"公开,因此可以从命令行中省略它的名称。如果公开多个函数,建议将其名称作为第一个程序参数传递,否则将调用第一个公开的函数。见下一节。没有类型验证/强制。**run**方法只在实际函数调用时传递
字符串。
为每个要处理的命令创建
一个函数,并用"commandlinemapper.add"注册所有这些函数。考虑下面的代码。
``python
from sh2py import commandlinemapper
cli=commandlinemapper()
cli.run()
````
则可以通过命令行指定要运行的函数。例如,若要使用参数"val1"和"val2"调用"subcommand2",请键入以下内容。
请注意,"subcommand2"项本身是从参数
行提取的。该行的其余部分照常处理。在本例中,`args2`
是`['val1','val2']`。
commandlinemapper
def hello(case='',shuffle='no',space='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)
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.好问题。我经常这样做。实际上,如果脚本足够小,并且需要零个、一个或两个位置参数,则不需要命令行处理工具。编写几个条件,并在出现错误时打印一条简单的帮助消息。