前言
当出现有很多个变量存放在数组中,且每个变量都需要调用shell脚本进行进一步处理的时候,我们可以通过构造python循环的方式进行处理:每次读取python数组中的一个元素,并将其转化为字符串变量,构造一条字符串格式的命令,并调用os.system()执行。
然而,这种方式的执行效率很低,其原因是循环调用os.system()导致程序需要不断开启子进程处理每一个元素。
因此,我们考虑在这种情况下,将python数组中的数据整体作为shell脚本的输入参数,这样仅调用一次os.system()就能完成上述的过程,而进一步的循环处理则写在shell中,避免了python为每一条命令去开启一条新的进程,提升程序的运行效率。
方法:环境变量
1、数据处理:转字符串
在python把数组元素传递给shell之前,我们需要把python的数组中所有数据转为字符串,最终形成一个字符串数组。
这么做的原因是:我们采用环境变量来传递参数,环境变量只能是字符串类型。
使用python自带的str()实现。
2、设置环境变量
经过第一步,我们已经得到了一个包含所有待处理数据的字符串数组,我们记为:data
我们在python中将数组中的数据设置为环境变量,具体实现是:
os.putenv(env_name, ' '.join(data))
其中,env_name是你命名的环境变量名称;
而join则是为了将上述的字符串数组合并为一个更长的字符串(环境变量只能是字符串),在这一步操作之前,data还只是一个字符串数组,要转为字符串。
3、调用
os.system('./你的shell脚本.sh "$' + env_name + '"')
带上你设置的环境变量名称,调用shell脚本。
需要注意的是,调用时的命令中,作为参数的环境变量的格式是 “$你的变量名” (双引号包括在命令行内容之内),如果不包含双引号,则只会引用数组的第一个元素。
4、编写Shell循环
for x in $1
do
# do something with $x
done
使用$1获取输入的第一个参数(即环境变量),循环获取环境变量中的每一个元素,并执行对应的命令。
参考资料