将python函数转换为命令行接口
hashbang的Python项目详细描述
哈什邦
#!/usr/bin/env python3fromhashbangimportcommand@commanddefecho(message):print(message)if__name__=='__main__':echo.execute() hashbang可以从pip安装
这还将包括argcomplete它为hashbang的自动完成提供动力。完成功能是可选的;如果要排除它,请使用 让我们从一些例子开始。 函数的返回值被打印到标准输出。 在这个简单的例子中,使用hashbang获得的附加值是帮助消息,以及在提供意外参数时的用法消息。 有关完整的API,请参见API参考Wiki页面。 如果 当使用常规的 可以使用 例如,可以在参数中添加别名。 有关完整的 命令的帮助消息直接取自函数的docstring。此外, hashbang还提供了tab completion功能,由argcomplete提供支持。由于argcomplete是hashbang的一个可选依赖项,因此您可以使用 安装后,要注册制表符完成命令,请运行 或者,激活全局completeion对于所有命令,请按照ArgComplete文档中的"全局完成"部分中的一次性设置说明进行操作,然后将字符串"python argcomplete"添加到文件顶部作为注释(在" 使用制表符补全的最简单方法是通过 如果提前(在执行之前)不知道这些选项,或者预计算成本太高,则可以为参数指定一个完成符。 与普通的python程序一样,设置退出代码的首选方法是使用 此外,如果要根据引发的异常返回不同的退出代码,也可以在异常处理程序中调用 有关进一步的阅读,请查看wiki页面。安装
python3 -m pip install hashbang[completion]
pip install hashbang
安装
快速入门示例
简单,无参数脚本
#!/usr/bin/env python3importosfromhashbangimportcommand@commanddefpwd():returnos.getcwd()if__name__=='__main__':pwd.execute()
$pwd.py
<详细内容>$ pwd.py
/home/mauricelam/code/hashbang
$pwd.py—帮助
<详细内容>$ pwd.py --help
usage: pwd.py [-h]
optional arguments:
-h, --help show this help message and exit
位置参数(
nargs='?'
)@commanddefls(dir=None):returnos.listdir(path=dir)
$ls.py
<详细内容>$ ls.py
bin
etc
home
usr
var
$ls.py bin
<详细内容>$ ls.py bin
cp
df
echo
mkdir
mv
pwd
rm
多位置参数(
nargs=none
)@commanddefcp(src,dest):shutil.copy2(src,dest)
$cp.py textfile.txt复制文本文件.txt
)#!/usr/bin/env python3fromhashbangimportcommand@commanddefecho(message):print(message)if__name__=='__main__':echo.execute()
0
<详细内容>可变位置参数(
nargs='*'
)#!/usr/bin/env python3fromhashbangimportcommand@commanddefecho(message):print(message)if__name__=='__main__':echo.execute()
1
$echo.py hello world
#!/usr/bin/env python3fromhashbangimportcommand@commanddefecho(message):print(message)if__name__=='__main__':echo.execute()
2
<详细内容>布尔标志(默认为False)(action="store_true"
#!/usr/bin/env python3fromhashbangimportcommand@commanddefecho(message):print(message)if__name__=='__main__':echo.execute()
3
$pwd.py
#!/usr/bin/env python3fromhashbangimportcommand@commanddefecho(message):print(message)if__name__=='__main__':echo.execute()
4
<详细内容>$pwd.py—解析符号链接
#!/usr/bin/env python3fromhashbangimportcommand@commanddefecho(message):print(message)if__name__=='__main__':echo.execute()
5
<详细内容>布尔标志(默认为真)(action='store_false')
#!/usr/bin/env python3fromhashbangimportcommand@commanddefecho(message):print(message)if__name__=='__main__':echo.execute()
6
$echo.py hello world&;echo'。
#!/usr/bin/env python3fromhashbangimportcommand@commanddefecho(message):print(message)if__name__=='__main__':echo.execute()
7
<详细内容>$echo.py--不使用newline hello world&;echo'。
#!/usr/bin/env python3fromhashbangimportcommand@commanddefecho(message):print(message)if__name__=='__main__':echo.execute()
8
<详细内容>关键字参数(
action='store'
)#!/usr/bin/env python3fromhashbangimportcommand@commanddefecho(message):print(message)if__name__=='__main__':echo.execute()
9
$echo-e'a,b,c,d\ne,f,g,h'cut.py--字段"1,2,3"--delimeter=','
python3 -m pip install hashbang[completion]
0
<详细内容>备忘单
<表><广告> < /广告><正文>参数类型
python语法
命令行示例
argparse等效值
位置(无默认值) def func(foo)
command.py foo
nargs=无
位置(默认值) def func(foo=none)
command.py foo
nargs='?'< /代码>
变量位置 def func(*foo)
命令.py foo bar baz
nargs='*'
变量位置(命名为 \\u rements\
)def func(*u余数)
nargs=argparse.rements
仅限关键字(默认为false) def func(*,foo=false)
command.py--foo
action='存储为真'
仅限关键字(默认为true) def func(*,foo=true)
command.py—nofoo
action='存储错误'
仅限关键字(其他默认类型) def func(*,foo='bar')
command.py—foo值
action='存储'
var关键字 def func(**kwargs)
在hashbang中不允许 命令委派
hashbang.subcommands
函数可用于创建命令链,如git branch
python3 -m pip install hashbang[completion]
1
$git.py分支
python3 -m pip install hashbang[completion]
2
<详细内容>$git.py branch你好
python3 -m pip install hashbang[completion]
3
<详细内容>$git.py日志
python3 -m pip install hashbang[completion]
4
<详细内容>自定义命令删除程序
子命令
不足以满足您的目的,您可以使用@command.delegator
装饰符。它的用法与@command
decorator相同,但实现函数必须在另一个命令上调用.execute(_rements\u)
,或者引发nomatchingdelegate
异常。python3 -m pip install hashbang[completion]
5
$who.py
python3 -m pip install hashbang[completion]
6
<详细内容>$who.py我是
python3 -m pip install hashbang[completion]
7
<详细内容>$who.py—打印死亡进程
python3 -m pip install hashbang[completion]
8
<详细内容>$who.py您是谁
python3 -m pip install hashbang[completion]
9
<详细内容>@命令时,decorator在这种情况下仍然可以工作,但是tab completion和help消息将是错误的。
使用
@command.delegator
#!/usr/bin/env python3importosfromhashbangimportcommand@commanddefpwd():returnos.getcwd()if__name__=='__main__':pwd.execute()
0
#!/usr/bin/env python3importosfromhashbangimportcommand@commanddefpwd():returnos.getcwd()if__name__=='__main__':pwd.execute()
1
<详细内容>使用
@命令
#!/usr/bin/env python3importosfromhashbangimportcommand@commanddefpwd():returnos.getcwd()if__name__=='__main__':pwd.execute()
2
<详细内容>参数自定义
@命令中的
参数
类进一步自定义参数。#!/usr/bin/env python3importosfromhashbangimportcommand@commanddefpwd():returnos.getcwd()if__name__=='__main__':pwd.execute()
3
$echo.py hello world&;echo'。
#!/usr/bin/env python3fromhashbangimportcommand@commanddefecho(message):print(message)if__name__=='__main__':echo.execute()
7
<详细内容>$echo.py-n hello world&;echo'。
#!/usr/bin/env python3importosfromhashbangimportcommand@commanddefpwd():returnos.getcwd()if__name__=='__main__':pwd.execute()
5
<详细内容>或者,也可以选择使用pep 3107中定义的参数注释语法指定
参数
。
#!/usr/bin/env python3importosfromhashbangimportcommand@commanddefpwd():returnos.getcwd()if__name__=='__main__':pwd.execute()
6
<详细内容>< Buff行情>参数api,请参见https://github.com/mauricelam/hashbang/wiki/api reference\argument。
帮助消息
参数中的
帮助
参数可用于记录每个参数。docstring中前缀为用法:
(不区分大小写)的段落用作用法消息。#!/usr/bin/env python3importosfromhashbangimportcommand@commanddefpwd():returnos.getcwd()if__name__=='__main__':pwd.execute()
7
$git.py——帮助
#!/usr/bin/env python3importosfromhashbangimportcommand@commanddefpwd():returnos.getcwd()if__name__=='__main__':pwd.execute()
8
<详细内容>$git.py——不存在
#!/usr/bin/env python3importosfromhashbangimportcommand@commanddefpwd():returnos.getcwd()if__name__=='__main__':pwd.execute()
9
<详细内容>制表符完成
设置
python3 -m pip install hashbang[completion]
1
$ pwd.py
/home/mauricelam/code/hashbang
之后)!
行)。指定选项
参数中的
选项
参数
构造函数。
2
$ pwd.py
/home/mauricelam/code/hashbang
$apt_get.py<;tab>;
3
$ pwd.py
/home/mauricelam/code/hashbang
4
$ pwd.py
/home/mauricelam/code/hashbang
5
<详细内容>$ pwd.py
/home/mauricelam/code/hashbang
使用完成符
6
$ pwd.py
/home/mauricelam/code/hashbang
$cp.py<;tab>;
7
$ pwd.py
/home/mauricelam/code/hashbang
8
<详细内容>$ pwd.py
/home/mauricelam/code/hashbang
退出代码
sys.exit()
。默认情况下,对于运行时不引发异常的函数,将返回退出代码0
,或者使用help
打印帮助消息。如果函数引发异常,则结果代码为1
。如果函数使用sys.exit()
退出,则会保留的退出代码。sys.exit()
。有关示例,请参见测试/扩展/自定义退出代码.py
。进一步阅读
推荐PyPI第三方库