Python Fabric任务不设置变量?

时间:2012-06-01 16:27:04

标签: python fabric

我不确定为什么会发生这种情况,但是当我尝试设置这样的变量时,我就不知道了:

@task
def deploy_small_ec2_ami(name):
    a = local("/usr/bin/ldapsearch -x -w secret -D 'cn=admin,dc=example,dc=net' -b 'dc=example,dc=net' -h ldap-01  -LLL 'cn=%s'" %(name))
    if a:
        sys.exit(1)

即使ldap中存在名称,也不会设置变量'a',因此退出永远不会生效。我试图添加'print a',我也没有看到任何东西,但我知道该命令有效,因为我输出如下(ldap中确实存在的主机):

user:~/Projects/fabtask$ fab deploy_small_ec2_ami:bob,ldap
[localhost] local: /usr/bin/ldapsearch -x -w secret -D 'cn=admin,dc=example,dc=net' -b 'dc=example,dc=net' -h ldap-01  -LLL 'cn=bob'
dn: cn=bob,ou=hosts,dc=example,dc=net
cn: bob
environment: production
ipHostNumber:
objectClass: device
objectClass: ipHost
objectClass: puppetClient
objectClass: top
puppetClass: cassandra      

我在其他脚本中使用var = local('some_command'),它工作正常。

1 个答案:

答案 0 :(得分:4)

我在capture=True电话上看不到local();这似乎是捕获命令输出所必需的。否则,local()始终返回None,其False语句中的if评估为{{1}}。请参阅docs here