代码之家  ›  专栏  ›  技术社区  ›  Florian

使用子流程输出中的列表

  •  0
  • Florian  · 技术社区  · 8 年前

    import subprocess
    
    proc = subprocess.Popen("fail2ban-client -d".split(' '), stdout=subprocess.PIPE)
    out, err = proc.communicate()
    out.decode('ascii')
    print(out)
    

    输出如下:

    ['set', 'syslogsocket', 'auto']
    ['set', 'loglevel', 'INFO']
    ['set', 'logtarget', '/var/log/fail2ban.log']
    ['set', 'dbfile', '/var/lib/fail2ban/fail2ban.sqlite3']
    ['set', 'dbpurgeage', 86400]
    ...
    

    我的问题是所有这些输出都不是一个列表。这只是一个非常大的字符串与新的行。 我尝试使用以下命令将每一行转换为列表:

    eval(out.decode('ascii').split('\n')[0])
    

    所以我的问题是如何将字符串(看起来像列表)转换为列表。

    1 回复  |  直到 8 年前
        1
  •  0
  •   jmd_dk    8 年前

    eval

    import io
    f = io.StringIO(out.decode('ascii'))
    first_list = eval(f.readline())
    second_list = eval(f.readline())