插入fabric命令的字符串输出时出现奇怪的问题

时间:2013-10-11 04:37:40

标签: python linux bash fabric string-interpolation

无法理解如何做某事我认为应该对Fabric很直观。我想捕获远程执行命令产生的stdout,然后在后续远程调用中使用结果。

但是,我的错误实在太难以理解。我觉得我正在做的事情有多个问题,但我不知道从哪里开始。也许有人可以帮我把它分开。

我有什么:

...
with cd(env.repo):
    abbrev_hash = run('git log -1 --pretty="%h"')
run("rsync -r --exclude '.git/*' %s %s" % (env.repo, abbrev_hash))
... 

相关产出:

  

[cookcountyjail.recoveredfactory.net]运行:git log -1 --pretty =“%h”   [cookcountyjail.recoveredfactory.net]出:   [cookcountyjail.recoveredfactory.net]输出:c6d4ea0   [cookcountyjail.recoveredfactory.net]出:   [cookcountyjail.recoveredfactory.net]出:   [cookcountyjail.recoveredfactory.net]运行:rsync -r --exclude'.git / *'> /home/ubuntu/repos/cookcoc6d4ea0l_2.0-dev

     

[cookcountyjail.recoveredfactory.net] out:/ bin / bash:-c:第1行:意外令牌newline' [cookcountyjail.recoveredfactory.net] out: /bin/bash: -c: line 1:附近的语法错误   [cookcountyjail.recoveredfactory.net]出:'   [cookcountyjail.recoveredfactory.net] out:

     

致命错误:run()在执行时收到非零返回码1

     

c6d4ea0ed:rsync -r --exclude'.git / *'/home/ubuntu/repos/cookcountyjail_2.0-dev

     

已执行:/ bin / bash -l -c“cd /home/ubuntu/website/2.0/websites&& export PATH = \”\ $ PATH:\“/ home / ubuntu / website / 2.0 / sites / active \“\”&& rsync -r --exclude'.git / *'/home/ubuntu/repos/cookcouc6d4ea0_2.0-dev   “

1 个答案:

答案 0 :(得分:2)

这不符合您的要求吗?

def t1():
    captured = local('ls -alh')
    print captured

http://docs.fabfile.org/en/1.8/api/core/operations.html#fabric.operations.run

  

run会将远程程序的stdout的结果作为单个返回   (很可能是多行)字符串。此字符串将显示失败和   成功的布尔属性,指定命令是否失败或   成功,并且还将返回代码包含为return_code   属性。此外,它还包括所要求的&实际   命令字符串分别执行,分别为.command和.real_command。

local文档中还有这一点:

http://docs.fabfile.org/en/1.8/api/core/operations.html#fabric.operations.local

  

本地目前无法同时打印和   捕获输出,如run / sudo。捕获kwarg允许你   根据需要在打印和捕获之间切换,默认为   假。

     

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

     

当capture = True时,您将看不到任何内容   从终端的子进程输出,但返回值将   包含捕获的stdout / stderr。

     

在任何一种情况下,与run和   sudo,这个返回值表示return_code,stderr,失败和   成功的属性。有关详细信息,请参阅运行。