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



在理解如何做一些我认为应该很直观的 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] run: git log -1 --pretty="%h" [cookcountyjail.recoveredfactory.net] 输出: [cookcountyjail.recoveredfactory.net] 输出: C6D4EA0 [cookcountyjail.recoveredfactory.net] 输出: [cookcountyjail.recoveredfactory.net] 输出: [cookcountyjail.recoveredfactory.net] run: 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] 输出:

致命错误: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/websites/active\"\" && rsync -r --exclude '.git/*'/home/ubuntu/repos/cookcouc6d4ea0_2.0-dev ">

这不做你想要的吗?

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

http://docs.fabfile.org/en/1.8/api/core/operations.html#fabric.operations.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 值始终为空。

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

在任何一种情况下,与运行和 sudo,此返回值显示return_code、stderr、failed 和 成功的属性。有关详细信息,请参阅运行。

最新更新