В fabric мениджърът на контекста 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
да се простира само до обхвата на функцията.
cd
използва глобално състояние е малко подвеждащо. Той променя работната директория, която така или иначе е глобално състояние, и неочакваноcd
е само един от няколкото начина, по които командите, разчитащи на работната директория, могат да се повредят. Ако искате около това, използвайте абсолютни пътища. - person   schedule 06.07.2013~
в тях. Предварителното тестване показва, че абсолютните пътища наистина работят, ако са наистина абсолютни. - person asmeurer   schedule 06.07.2013