Python Fabric不会传递变量

时间:2015-06-26 19:35:03

标签: python variables fabric

我有一个正在运行的脚本。我做了一个小改动,现在它停止了工作。顶级版本有效,而底层版本失败。

def makelocalconfig(file="TEXT"):
    host = env.host_string
    filename = file
    conf = open('/home/myuser/verify_yslog_conf/%s/%s' % (host, filename), 'r')
    comment = open('/home/myuser/verify_yslog_conf/%s/localconfig.txt' % host, 'w')
    for line in conf:
        comment.write(line)
    comment.close()   
    conf.close()


def makelocalconfig(file="TEXT"):
    host = env.host_string
    filename = file
    path = host + "/" + filename
    pwd = local("pwd")
    conf = open('%s/%s' % (pwd, path), 'r')
    comment = open('%s/%s/localconfig.txt' % (pwd, host), 'w')
    for line in conf:
        comment.write(line)
    comment.close()   
    conf.close()

出于问题排查目的,我添加了print pwdprint path行,以确保变量正确填充。 pwd空洞。为什么这个变量没有正确设置?我使用相同的格式     var = sudo(" cmd") 每时每刻。 localsudorun不同吗?

1 个答案:

答案 0 :(得分:1)

简而言之,您可能需要添加capture=True

pwd = local("pwd", capture=True)

local运行命令本地

  

围绕使用内置Python子进程的便利包装器   模块与shell = True激活。

run在远程服务器上运行命令,sudo以超级用户身份运行远程命令。

文档中还有一个注释:

  

local当前不能同时打印和捕获输出,就像run / sudo那样。捕获kwarg允许您根据需要在打印和捕获之间切换,默认为False。

     

当capture = False时,本地子进程'stdout和stderr流直接连接到您的终端,但您可以使用全局输出控件output.stdout和output.stderr来隐藏其中一个或两个。在此模式下,返回值的stdout / stderr值始终为空。