在Windows上运行Fabric中的local()命令

2 投票
1 回答
2951 浏览
提问于 2025-04-17 10:33

我注意到在Windows上使用local()命令时出现了一些奇怪的情况,这个问题是在我升级Fabric之后发现的(我之所以升级是因为local命令之前不工作)。我fabfile中相关的部分是这样的:

env.hosts = ['server.com:22'] # One or multiple server addresses in format ip:port
env.path = '/code'
env.apache_path = '/apache'
env.user = 'user'
env.prj_name = 'user'
env.password = 'password'

def test():
    local('python manage.py test measurements temperature results', capture=False)

以前运行fab test命令时,会启动典型的Django测试套件。在我的Mac上依然可以正常运行。但是在Windows上,它现在声称正在运行命令,但实际上没有进行任何测试。如果我把环境信息移到命令里(或者直接删除它),fab test就能正常工作。这种情况应该是这样的吗?环境字典会影响local()吗?

我在Windows 7上使用Fabric 1.3.3,32位Python。

1 个回答

3

当你调用一个 local 函数时,实际上你传入的命令会被一些不同的 env 变量包裹和前缀(在这个问题中提到的一个变量是 env.path)。所以,最终执行的命令并不完全是你传入的那个命令,可能还有一些配置导致这个命令执行失败。

要解决这个问题,确保你知道到底执行了什么命令,可以使用 --show=debug 来查看:

fab --show=debug <task>

一旦你确切知道执行的命令是什么,你就可以尝试重现这个问题,找出到底发生了什么。

撰写回答