无法理解如何做某事我认为应该对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 “
答案 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,失败和 成功的属性。有关详细信息,请参阅运行。