我正在尝试编写一个结构任务,该任务会覆盖包含从内部标识到外部标识的映射的文件。一旦我得到了这些信息,我可以在部署期间用它做几件事。但是,我陷入了第一步。我确定我错过了一些明显的东西。这是失败的当前函数:
def mapFromIntId(intId):
sudo('grep -i "%s" /data/ids/*' % intId)
当我运行时,我收到以下错误:
[10.19.4.188] Executing task 'mapFromIntId'
[10.19.4.188] sudo: grep -i "79959cfe" /data/ids/*
Fatal error: sudo() received nonzero return code 1 while executing!
Requested: grep -i "79959cfe" /data/ids/*
Executed: sudo -S -p 'sudo password:' /bin/bash -l -c "grep -i \"79959cfe\" /data/ids/*"
Aborting.
Disconnecting from 10.19.4.188... done.
它看起来是正确的,如果我自己运行显示的命令它工作正常。这需要几秒钟,因为id文件相当大。但它确实完成了。
非常感谢任何帮助。感谢。
答案 0 :(得分:1)
Grep在许多不同情况下返回非零退出代码。从手册页:
退出状态 grep实用程序以下列值之一退出:
0 One or more lines were selected. 1 No lines were selected. >1 An error occurred.
所以你在这里有一个非匹配的退出代码。只需使用上下文管理器并将该部分设置为warn_only
:
from fabric.api import settings, run
def test(path):
with settings(warn_only=True):
return run('grep ...')
价: