-excc之后的Python Fabric local()缺少语句

时间:2013-12-05 05:57:33

标签: python fabric

我在使用Python Fabric删除一些本地文件时遇到问题。然而,我在StackOverflow上发现了一个带有解决方案的相关帖子。但我想知道为什么最后添加2>&1来解决它?

我可以在终端中完成以下操作:

$ find app/views/ -type f -name '*%%.php' -exec rm {} \;

然而,当我进行面料通话时,我得到:

$ fab rmcache
[localhost] local: find app/views/ -type f -name '*%%.php' -exec rm {} \;
find: missing argument to `-exec'

Fatal error: local() encountered an error (return code 1) while executing 'find
app/views/ -type f -name '*%%.php' -exec rm {} \;'

0:为什么通过Fabric需要2>&1,而不是本地?

1:为什么这会通过Fabric工作?

def rmcache():
    local("find {0} -type f -name '*%%.php' -exec rm {{}} \ 2>&1;".format('app/views/'));

2:但这不适用于面料?

def rmcache():
    local("find {0} -type f -name '*%%.php' -exec rm {{}} \;".format('app/views/'));

1 个答案:

答案 0 :(得分:1)

0:2>&1将stderr重定向到stdout,这意味着如果你的命令正在抛出一个错误,那么结构将无法获取它,因为它没有被返回到结构(请参阅此answer了解更多信息有关2>& 1)的详细信息。

1& 2:我的猜测是你的代码抛出了一个错误,因为'app/views'是一个相对路径而find要求目录存在,因此你必须从包含app的目录运行fabric命令目录。尝试使用'/full/path/to/app/views'确保使用正确的目录。