Python Fabric fabfil执行模型解析器
我制作了一些使用Fabric的脚本,它使用ssh在多个服务器上执行一些工作。但是我的脚本就像一个经典的python脚本 以下是形状(它们看起来的样子):Python Fabric fabfil执行模型解析器,python,parameter-passing,fabric,Python,Parameter Passing,Fabric,我制作了一些使用Fabric的脚本,它使用ssh在多个服务器上执行一些工作。但是我的脚本就像一个经典的python脚本 以下是形状(它们看起来的样子):my_script.py带有一些函数和一个main: from fabric.api import * from a_custom_class import * def function1(): #do stuff def function2(): #do stuff def main(): parser = Argu
my_script.py
带有一些函数和一个main:
from fabric.api import *
from a_custom_class import *
def function1():
#do stuff
def function2():
#do stuff
def main():
parser = ArgumentParser()
parser.add_argument('-n', '--nolaunch', help='start the parsing', action='store_false')
...
execute(function1)
execute(function2)
if __name__ == "__main__":
main()
因此,要使用我的脚本,我只需执行python my_script.py
这很有效。但是我无法用fab-f my_scrip.py main
调用它
我把剧本写成“普通”剧本是错的吗?或者有一种方法可以使用fab
调用它,而无需重新编写它
当我尝试fab-f my_script.py main
时,它会从我的脚本中输出帮助(因此我觉得我离某个东西很近):
这些是我在scipt上的选择。但是,如果我试着将其称为“惯常方式”python my_script.py-h
,它的显示方式就不同了:
-h, --help show this help message and exit
-n, --nolaunch start the parsing
-g, --html generate the html
-m CARTO, --carto CARTO Do the carto stuff
调用真正的main只需列出我的scriptfab-f my_script.py\uu main\uuu
中的函数,我可以使用以下函数调用任何函数:fab-f my_script.py my_function
但我不知道如何为ArgumentParser提供选项值。我试过这样的方法:
fab-f my_script.py main:
,但没有成功。我找到了一种方法。但它真的很难看
#fabfile.py
import my_script as script
def task():
execute(script.mainbis)
在my_script.py中,我创建了一个mainbis(),它覆盖sys.argv并调用main函数:
#my_script.py
def mainbis():
# ask interactively the option
# list_option=['--What', '--the', '--user', '--said']
list_option.insert(0,my_script.py) #we need the script name as 1st argument
sys.argv=list_option
main()
现在我可以调用:fab task
,并在后面输入选项。你们认为这可以接受吗
此外,结构中还有一个env.variable:
任务默认值:[]
由fab设置为当前任务要执行的完整任务列表
执行命令仅供参考。
当我调用fab task--tasks=
但再一次,我觉得这不是正确的方法,我找到了一种方法。但它真的很难看
#fabfile.py
import my_script as script
def task():
execute(script.mainbis)
在my_script.py中,我创建了一个mainbis(),它覆盖sys.argv并调用main函数:
#my_script.py
def mainbis():
# ask interactively the option
# list_option=['--What', '--the', '--user', '--said']
list_option.insert(0,my_script.py) #we need the script name as 1st argument
sys.argv=list_option
main()
现在我可以调用:fab task
,并在后面输入选项。你们认为这可以接受吗
此外,结构中还有一个env.variable:
任务默认值:[]
由fab设置为当前任务要执行的完整任务列表
执行命令仅供参考。
当我调用fab task--tasks=
但再一次,我觉得这不是正确的方法,这很难说。你的代码不可复制。在您有机会解析它之前,我只能猜测结构“吃”了命令行中的参数……很抱歉,我不能放入真正的代码,它只有几千行。是的,我想就是这样了,试着把这个论点当作是为他而写的。我将继续我的经典调用
python my_script.py
。我可能会做一个小的Fab任务,以交互方式询问选项,然后调用我的脚本。那将很好。我试图查看fabrics源代码,它使用了optpasse
包中的OptionParser
。我甚至试着检查OptionParser
是否删除了参数,但是在失败之后,我感到厌烦并失败了。但如果你做得更好,请告诉我,谢谢。:)我可能会做一个配置文件并在我的main中解析它。然后调用fab task--config=CONF.cfg
,我将在CONF.cfg
中找到我的选项,这很难说。你的代码不可复制。在您有机会解析它之前,我只能猜测结构“吃”了命令行中的参数……很抱歉,我不能放入真正的代码,它只有几千行。是的,我想就是这样了,试着把这个论点当作是为他而写的。我将继续我的经典调用python my_script.py
。我可能会做一个小的Fab任务,以交互方式询问选项,然后调用我的脚本。那将很好。我试图查看fabrics源代码,它使用了optpasse
包中的OptionParser
。我甚至试着检查OptionParser
是否删除了参数,但是在失败之后,我感到厌烦并失败了。但如果你做得更好,请告诉我,谢谢。:)我可能会做一个配置文件并在我的main中解析它。然后调用fab task--config=CONF.cfg
,我将在CONF.cfg