Born vs. Me Asked: 2019-01-15 01:41:57 +0800 CST2019-01-15 01:41:57 +0800 CST 2019-01-15 01:41:57 +0800 CST bash函数实现python命令 772 我有这个 python -c "import sys, urllib as ul; \ print ul.quote('sample hihi ')" 如何将它包装到 bash 函数中,这样我就可以像这样调用它: urlencode('sample hihi ') 谢谢 bash functions 1 个回答 Voted Best Answer Byte Commander 2019-01-15T02:28:28+08:002019-01-15T02:28:28+08:00 您应该将函数参数作为常规 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
您应该将函数参数作为常规 shell 参数传递到 Python 代码中,这些参数可以通过
sys.argv
数组访问。在 Bash 函数中,可以访问其调用参数,例如通过"$*"
,它将所有参数作为单个空格分隔的字符串参数返回(就好像它作为一个整体被引用,而不是单独的标记)。这是一个遵循原始代码的示例:
然而,由于 Python 2 支持即将结束,这里有更好的 Python 3 等价物:
两者的调用是相同的,键入函数名称,后跟要编码为参数的字符串。不要忘记适当地引用它:
注意:永远不要直接将 shell 参数注入您的 Python 代码字符串,例如
python -c "print('$x')"
,因为如果您打算在不受信任的输入上运行您的函数,从而允许人们运行任意命令,这可能会导致容易被利用的安全风险!看看这个 shell 示例,我在变量
x
中制作参数以运行系统命令uname
(这是无害的,只是打印“Linux”,但你可以在这里做任何事情):