python - “cd”命令不适用于 fabric3

标签 python fabric

我正在使用 fabric3 ( https://pypi.python.org/pypi/Fabric3 ),fabric 的 python 3 端口。

我有以下功能:

@roles('production')
def dir():
    run('pwd')
    run('ls')
    cd('/home/deploy/mydir')
    run('pwd')

输出:

$ fab dir
[deploy@196.x.x.x] Executing task 'dir'
[deploy@196.x.x.x] run: pwd
[deploy@196.x.x.x] out: /home/deploy
[deploy@196.x.x.x] out:

[deploy@196.x.x.x] run: ls
[deploy@196.x.x.x] out: Env  mysite
[deploy@196.x.x.x] out:

[deploy@196.x.x.x] run: pwd
[deploy@196.x.x.x] out: /home/deploy
[deploy@196.x.x.x] out:

为什么忽略 CD?

最佳答案

每个命令都在单独的“环境”中工作。

cd() 更改文件夹,但下一个命令以新的、清晰的“环境”开始。

但是你可以使用with:

 with cd("<path>"):   
     run("<command>")

在 Fabric 文档中查看更多信息:Context Managers

或者你可以手动做

run("cd <path> && <command>")

关于python - “cd”命令不适用于 fabric3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42099999/

相关文章:

python - 一起运行 Fabric 和 Python 脚本

python - Windows 中的 UAC 和 Windows 框选择

python - 无法使用 python mechanize 从网站访问表单

python - 使用 Vagrant 和 Docker 运行 Python SSH 单元测试

python - 仅当 Mercurial 发生任何更改时才运行 commit

python - 如何通过 ssh key 使用 Fabric?

python - 将 Pandas 时间戳转换为时间(寻找比 .apply 更快的东西)

python - 属性错误: 'NavigableString' object has no attribute 'find_all' (NameError)

python - 在 lambda 表达式中使用变量的值

python - 如何使用 Fabric 传递 SSH 选项?