我在使用Fabric(Ubuntu 13.04上的1.7.0版)时遇到了一些问题。你知道吗
考虑这个函数:
def does_not_work():
with cd('/absolute/folder/one/'):
with prefix('change_path_command'):
with cd('/absolute/folder/two/'):
run('some_random_command')
我希望它执行与以下命令相同的命令:
def works():
run('cd /absolute/folder/one/ && change_path_command && cd /absolute/folder/two/ && some_random_command')
但是,这里是fab does_not_work
的结构输出:
Requested: some_random_command
Executed: /bin/bash -l -c "cd /absolute/folder/two/ && change_path_command && some_random_command"
似乎嵌套cd
给我带来了麻烦。你知道吗
有什么好的解释吗?你知道吗
当您调用^{} context manager 和^{} context manager 时,它们实际上并不运行命令,它们只是修改一些影响
run()
和/或sudo()
的任何后续调用的本地环境设置。你知道吗因此,当执行
run('some_random_command')
时,它会在(cd=/folder/one
、prefix=change_path_command
、cd=/folder/two
的上下文中运行,由于内部的cd
优先于外部的cd
,因此最终结果是使用cd /folder/two && change_path_command && some_random_command
执行单个命令。你知道吗看一下^{} 和^{} 的源代码,更好地了解它们的工作原理—它们最终要做的就是在进入和退出时修改字典} 的调用中,该函数通过
fabric.state.env
。这些函数稍后应用于对^{_run_command()
函数从run()
和sudo()
调用。你知道吗相关问题 更多 >
编程相关推荐