0

在结构中,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")from 助手现在运行 frombar/foo而不是 just foo

关于如何解决这个问题的任何提示?我尝试在 cd 中使用绝对路径,但这不起作用。我真正想要的是cd上下文只扩展到函数范围。

4

1 回答 1

0

所以显然绝对路径确实有效。问题是路径~不起作用(它们被视为相对路径,恕我直言,这是结构中的一个错误),这就是我正在尝试的。所以你必须这样做(例如,如果你正在使用 vagrant)cd('/home/vagrant/foo')

可能您可以摆脱嵌套上下文管理器中的相对路径

def func():
    with cd("/home/vagrant/foo"):
        stuff()
        with cd("bar"): # cd /home/vagrant/foo/bar
            more_stuff()

因为当您调用cd('bar'). 但是对于顶级cds,如果可以从另一个函数中调用该函数(而不仅仅是直接从fab),则应该使用绝对路径。

于 2013-07-06T18:27:50.310 回答