从bash脚本导出列表到python

时间:2014-09-18 10:28:51

标签: python bash list import export

在python脚本中,我想使用包含列表的bash脚本中的变量。

我这样做如下: 首先,我在bash脚本中创建了一个列表。另外,我将列表格式更改为python格式,最后导出列表:

#!/bin/bash

PYTHONPATH=$(which python)

TDATES="080201 080523 080905 090116 090515 090828 091211 100416 100730 101112
        110311 110701 111014 120210 120601 120914 130111 130503 130809 131213
        140404 140725"

echo $TDATES > datei.txt
sed "s/ /\\', \\'/g" datei.txt | sed "s/^/[\\'/g" | sed "s/$/\\']/g" > tdates.txt
TDP=$(cat tdates.txt)

export TDP

rm tdates.txt datei.txt

# exec python script
${PYTHONPATH} plot.py

'sed'命令将使格式从“080201 080523 ...”到['080201','080523','...',]。在python脚本中,我使用以下命令导入列表:

# plot.py
import os
TDATES = os.getenv('TDP')
print TDATES

屏幕输出如下:['080201','080523','...']哪个好, 如果我尝试用

循环'TDATES'
for i in TDATES:
    print i

我会得到

[
'
0
8
0
2
0
1
'
,

而不是

080201
080523
...

我无法弄清楚我没注意到什么。感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

该行

TDATES = os.getenv('TDP')

将环境变量TDP的值指定为TDATES作为字符串。对字符串的迭代将一次进行一个字符,因此输出。举个例子:

>>> for c in "string":
...     print c
... 
s
t
r
i
n
g

您需要做的是将字符串TDATES解析为Python列表,然后遍历该列表。一种方法是使用ast.literal_eval()函数:

>>> from ast import literal_eval
>>> TDATES = literal_eval(os.getenv('TDP'))
>>> type(TDATES)
<type 'list'>

>>> for date in TDATES:
...     print date
080201
080523
...

答案 1 :(得分:0)

不要改变TDATES,它在python中是完全可解析的。你的bash脚本看起来像这样:

#!/bin/bash

PYTHONPATH=$(which python)
TDATES="080201 080523 080905 090116 090515 090828 091211 100416 100730 101112
        110311 110701 111014 120210 120601 120914 130111 130503 130809 131213
        140404 140725"
export TDATES
# exec python script
${PYTHONPATH} plot.py

你的python脚本看起来像这样:

import os
TDATES = os.getenv('TDATES')
for i in TDATES.split(' '):
    print i

另一种方法是不导出环境变量,并在bash脚本中将$TDATES变量作为输入参数传递给python脚本:

${PYTHONPATH} plot.py ${TDATES}

然后在python中你会这样做:

import sys
for i in sys.argv[1:]
    print i