【问题标题】:python fabric run awk command return a KeyError: 'print $1'python fabric run awk 命令返回一个 KeyError: 'print $1'
【发布时间】:2024-01-13 18:55:01
【问题描述】:

我正在使用 python fabric run 命令,它不起作用并给我一个 KeyError:

run('docker ps -a | grep {} | awk "{print $1}"'.format(container_name))
KeyError: 'print $1'

但如果我用 %s 替换 .format,它会起作用,这怎么可能:

run("docker ps -a | grep %s | awk '{print $1}'" % container_name)

我的python 2.7.8版,“.format()”肯定可以用,好像和“awk”命令有关。

【问题讨论】:

    标签: python docker fabric


    【解决方案1】:

    Format 正在尝试替换 {print $1},当然没有这样的密钥。

    您可以通过用 {} 包围它们来避开 {}:

    run('docker ps -a | grep {} | awk "{{print $1}}"'.format(container_name))
    

    应该可以 - 作为测试: iPython 3.0:

    In [1]: container_name = 'fred'
    
    In [2]: 'docker ps -a | grep {} | awk "{{print $1}}"'.format(container_name)
    Out[2]: 'docker ps -a | grep fred | awk "{print $1}"'
    

    Python:

    Python 2.7.8 (default, Oct 20 2014, 15:05:19) 
    [GCC 4.9.1] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> container_name = 'fred'
    >>> 'docker ps -a | grep {} | awk "{{print $1}}"'.format(container_name)
    'docker ps -a | grep fred | awk "{print $1}"'
    >>> 
    

    【讨论】:

    • 我添加了几个我运行的测试。
    • 我想我刚才有一些错字。谢谢。