【问题标题】:Fabric script doesn't printing output on success [duplicate]Fabric脚本在成功时不打印输出[重复]
【发布时间】:2016-11-17 01:33:40
【问题描述】:
import sys
from fabric.api import *

env.hosts = ['my.host.com']
env.user = 'myuser'
env.password = 'mypassword'
# env.shell = '/bin/bash -l -c'

def deploy():
    x = run("cd /srv/proj/")
    print x.__dict__

我正在尝试登录远程 shell 并执行这个简单的cd 命令。 虽然显示没有错误

[my.host.com] run: cd /srv/proj/
{'succeeded': True, 'return_code': 0, 'failed': False, 'command': 'cd /srv/proj/', 'stderr': '', 'real_command': '/bin/bash -l -c "cd /srv/proj/"'}

但是当我在 cd 命令之后执行run('ls') 时,它什么也没打印,但肯定有文件。所以这里发生了什么。除此之外,我在执行手动设置命令时遇到问题(我的意思是 .bashrc 文件中的别名)。织物使用/bin/bash -l -c ...。我该如何克服这些障碍。

我使用的是 ubuntu 14.04

ps:和os.chdir不一样

【问题讨论】:

  • run("cd /srv/proj/") 替换为os.chdir("/srv/proj/") 或将2 个命令合并为run("cd /srv/proj/; ls")

标签: python bash deployment web-deployment fabric


【解决方案1】:

你可以试试with cd

def deploy():
    with cd("/srv/proj/"):
        x = run("ls")
    print(x)

【讨论】:

  • 太好了,它成功了,你能解释一下这里发生了什么吗?为什么我们需要with,标签?
  • 对于所有with cd 块,您都在/srv/proj/ 目录中,因此您将运行的每个命令都将在那里执行。当您离开该块时,您将回到您之前的目录。 (我不能告诉你这是否在命令之前附加了cd /srv/proj/,因为我不知道它是如何做到的。)
  • 另外,cd 不能返回任何东西(除了执行代码)所以x = run(cd ..) 除了检查它是 0 还是 1 之外没有多大意义
猜你喜欢
  • 2020-02-01
  • 2013-10-01
  • 2021-11-20
  • 1970-01-01
  • 2013-03-21
  • 1970-01-01
  • 2021-01-11
  • 1970-01-01
  • 2016-04-20
相关资源
最近更新 更多