bash函数实施python命令

bash函数实施python命令

我有这个

python -c "import sys, urllib as ul; \
    print ul.quote('sample hihi ')"

我怎样才能将它包装到 bash 函数中,以便我可以像下面这样调用它:

urlencode('sample hihi ')

谢谢

答案1

您应该将函数参数作为常规 shell 参数传递到 Python 代码中,这些参数可以通过数组访问sys.argv。在 Bash 函数中,可以通过 访问其调用参数,例如"$*",它将所有参数作为单个空格分隔的字符串参数返回(就像将其作为一个整体引用而不是单独的标记一样)。

以下是遵循原始代码的示例:

urlquote() { python -c 'import sys, urllib as ul; print ul.quote(sys.argv[1])' "$*" ;}

然而,由于 Python 2 支持即将结束,下面是更好的 Python 3 等效版本:

urlquote() { python3 -c 'import sys, urllib.parse as ul; print(ul.quote(sys.argv[1]))' "$*" ;}

两者的调用都是相同的,键入函数名称,然后是要编码的字符串作为参数。

$ urlquote "roses are red, violets are blue..."
roses%20are%20red%2C%20violets%20are%20blue...

笔记:永远不要将 shell 参数直接注入到你的 Python 代码字符串中,因为python -c "print('$x')"如果你计划在不受信任的输入上运行你的函数,这可能会导致容易被利用的安全风险,允许人们运行任意命令!

看一下这个 shell 示例,我x以一种方式在变量中制作参数来运行系统命令uname(这无害并且只打印“Linux”,但您可以在这里做所有事情):

$ x="');import os;os.system('uname');('"

$ python3 -c "print('$x')"
Linux

相关内容