将列表从bash脚本导出到python

2024-06-26 13:54:36 发布

您现在位置:Python中文网/ 问答频道 /正文

在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脚本中,我使用以下命令导入列表:

^{pr2}$

屏幕输出如下:['080201','080523','…']这很好,但是 如果我试着用

for i in TDATES:
    print i

我去拿

[
'
0
8
0
2
0
1
'
,

而不是

080201
080523
...

我不知道我没注意到什么。感谢您的帮助!在


Tags: 命令echotxt脚本bashwhich列表bin
2条回答

不要更改tdate,它在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脚本如下所示:

^{pr2}$

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

${PYTHONPATH} plot.py ${TDATES}

然后在python中,您将执行以下操作:

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

线

TDATES = os.getenv('TDP')

将环境变量TDP的值作为字符串分配给TDATES。在一个字符串上的迭代将一次进行一个字符,因此您的输出。例如:

^{pr2}$

您需要做的是将字符串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
...

相关问题 更多 >