【问题标题】:export list from bash script to python将列表从 bash 脚本导出到 python
【发布时间】:2014-11-12 15:34:13
【问题描述】:

在 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
...

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

【问题讨论】:

    标签: python bash list import export


    【解决方案1】:

    线

    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
    ...
    

    【讨论】:

    • 感谢您的解释!但是如何将 TDP 变量作为 list 分配给 TDATES?抱歉,我对 python 很陌生...
    • TDATES = literal_eval(os.getenv('TDP')) 这样做 - 它解析 TDP 环境变量的值并将结果绑定到 TDATES。因为输入符合列表定义,literal_eval 返回一个列表对象,因此 TDATES 是列表类型。
    【解决方案2】:

    不要更改 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
    

    【讨论】:

      猜你喜欢
      • 2018-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-11
      相关资源
      最近更新 更多