如何将Python数组作为数组传递给shell脚本?

时间:2013-12-24 20:58:04

标签: python linux bash shell

我有一个shell脚本(test.sh),我在其中使用像这样的bash数组 -

#!/bin/bash

...

echo $1
echo $2

PARTITION=(0 3 5 7 9)

for el in "${PARTITION[@]}"
do
    echo "$el"
done

...

截至目前,我已经在shell脚本中硬编码了PARTITION数组的值,如上所示..

现在我有一个Python脚本,如下所述,我通过传递hello1hello2之类的参数来调用test.sh shell脚本,我可以将其作为{{1}接收}和$1。现在,我如何将$2jj['pp']从我的Python脚本传递到Shell脚本,然后像我目前在bash脚本中那样迭代该数组?

如果我通过jj['sp']

,下面的脚本不起作用
jj['pp']

更新: -

JSON文档下面只有这种格式 -

import subprocess
import json
import os

hello1 = "Hello World 1"
hello2 = "Hello World 2"

jsonData = '{"pp": [0,3,5,7,9], "sp": [1,2,4,6,8]}'
jj = json.loads(jsonData)

print jj['pp']
print jj['sp']

# foo = (0, 3, 5, 7, 9)

# os.putenv('FOO', ' '.join(foo))

print "start"
subprocess.call(['./test.sh', hello1, hello2, jj['pp']])
print "end"

所以我需要在传递给shell脚本时将其转换为bash数组。

1 个答案:

答案 0 :(得分:3)

的Python

import os
import json
import subprocess

hello1 = "Hello World 1"
hello2 = "Hello World 2"

jsonData = '{"pp": [0,3,5,7,9], "sp": [1,2,4,6,8]}'
jj = json.loads(jsonData)

print jj['pp']
print jj['sp']

os.putenv( 'jj', ' '.join( str(v) for v in jj['pp']  ) )

print "start"
subprocess.call(['./test.sh', hello1, hello2 ])
print "end"

的bash

echo $1
echo $2

for el in $jj
do
    echo "$el"
done

从这里采取:Passing python array to bash script (and passing bash variable to python function)