我在使用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/'));
答案 0 :(得分:1)
0:2>&1
将stderr重定向到stdout,这意味着如果你的命令正在抛出一个错误,那么结构将无法获取它,因为它没有被返回到结构(请参阅此answer了解更多信息有关2>& 1)的详细信息。
1& 2:我的猜测是你的代码抛出了一个错误,因为'app/views'
是一个相对路径而find
要求目录存在,因此你必须从包含app的目录运行fabric命令目录。尝试使用'/full/path/to/app/views'
确保使用正确的目录。