关于如何从python运行shell命令有很多文献,但是我有兴趣做相反的事情。我有一个python模块mycommands.py,它包含如下函数
def command(arg1, arg2):
pass
def command1(arg1, arg2, arg3):
pass
其中函数参数都是字符串。目标是能够从bash运行这些函数,如下所示
$ command arg1 arg2
$ command1 arg1 arg2 arg3
到目前为止,我在.bash\u profile中已经有了下面的野蛮设置,在这里我必须手动为每个python函数提供bash绑定
function command() {
python -c "import mycommand as m; out=m.command('$1', '$2'); print(out)"
}
function command1() {
python -c "import mycommand as m; out=m.command1('$1', '$2', '$3'); print(out)"
}
如果有一个bash命令
$ import_python mycommands.py
它会自动将模块中的所有python函数作为bash命令导入。是否存在实现此类命令的库?
根据您的实际用例,最好的解决方案可能是简单地使用Click(或者至少使用标准库中的
argparse
模块)来构建您的Python脚本并将其称为从贝壳里。
请参阅Mercurial以获取这方面的一个显著示例。
如果确实必须将命令作为一级shell命令,请使用符号链接或别名,如其他答案中所述。
只需几个方法,就可以在
sys.argv[0]
上进行符号链接和分派:使用多个子命令,您可以在Python脚本中添加如下内容以“自动化”该过程:
您可以这样使用它(假设您的
$PATH
中有一个名为cmd.py
的可执行Python脚本):NB:以上是一个非常简单的示例,演示如何在shell中使用
eval
。可以使用参数运行脚本,然后执行以下操作:
(f1不带参数调用,f2带2个参数调用。错误处理还不是傻瓜证明。)
这不允许你调用
但你可以
编辑:
您可以创建别名:
为了达到你的要求:
您可以创建一个基本脚本,例如
command.py
,并检查该脚本的名称(不要忘记使其可执行):然后可以创建指向此脚本的软链接:
最后测试一下:
相关问题 更多 >
编程相关推荐