Python Fabric fabfil执行模型解析器

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

我制作了一些使用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 = 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只需列出我的script
fab-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