在结构中,cd
上下文管理器的工作方式与
with cd("dir"):
run("command")
并在更改为dir
目录后运行该命令。这很好,但问题是它使用全局状态。例如,假设我有一个辅助函数,需要使用cd:
def helper():
with cd("foo"):
run("some command")
如果我从其他功能(如
)拨打helper
def main_function():
helper()
...
它工作正常。但是,如果我做了像
这样的事情def main_function():
with cd("bar"):
helper()
它会中断,因为助手的run("come command")
现在从bar/foo
而不是foo
运行。
有关如何解决此问题的任何提示?我尝试在cd中使用绝对路径,但这不起作用。我真正想要的是cd
上下文只扩展到函数范围。
答案 0 :(得分:0)
显然绝对路径做工作。问题是~
的路径不起作用(它们被视为相对路径,IMHO是结构中的错误),这就是我正在尝试的。所以你必须做(例如,如果你使用流浪汉)cd('/home/vagrant/foo')
。
可能你可以逃脱嵌套上下文管理器中的相对路径
def func():
with cd("/home/vagrant/foo"):
stuff()
with cd("bar"): # cd /home/vagrant/foo/bar
more_stuff()
因为您在调用cd('bar')
时确切知道当前工作目录是什么。但是对于顶级cd
,如果可以从另一个函数(不仅仅是直接来自fab
)调用该函数,则应该使用绝对路径。