Python向Shell脚本传递数组参数

前言

 

当出现有很多个变量存放在数组中,且每个变量都需要调用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获取输入的第一个参数(即环境变量),循环获取环境变量中的每一个元素,并执行对应的命令。

 

参考资料

 

https://stackoverflow.com/questions/20766667/how-do-i-pass-python-arrays-to-shell-script-as-an-array/20766702

 

你可能感兴趣的:(bug记录和问题解决,python,shell,编程语言)