将多个参数从slack传递给errbot

时间:2017-03-06 17:14:37

标签: python slack errbot

我想像这样传递多个参数:

@bot test vpn PeerIP:x.x.x.x,可选参数:Peersubnet y.y.y.y ClCSubnet z.z.z.z

现在,当传递多个参数时,我收到错误:

  

计算机说没有。请参阅日志了解详情:   test_vpn()缺少2个必需的位置参数:' PeerSubnet'和' ClcSubnet'

代码:     电脑说没有。请参阅日志了解详情: test_vpn()缺少2个必需的位置参数:' PeerSubnet'和' ClcSubnet'

我更进一步,现在我在传递多个参数INTO powershell时出现问题,PS正在寻找命名参数。

新代码:

    @arg_botcmd('--dc', dest='DataCenter', type=str)
@arg_botcmd('--peerIp', dest='PeerPublicIp', type=str)
@arg_botcmd('--peerSubnet', dest='PeerSubnet', type=str)
@arg_botcmd('--ClcSubnet', dest='ClcSubnet', type=str)
def test_vpn(self, args, DataCenter=None, PeerPublicIp=None, PeerSubnet=None, ClcSubnet=None):
    output = subprocess.check_output([
        "C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\powershell.exe",
        ". \"C:\\Program Files\\Toolbox\\PowerShell Modules\\Juniper\\./Juniper.psm1\";",
        "Test-juniperS2SVPN",
        DataCenter,
        PeerPublicIp,
        PeerSubnet,
        ClcSubnet,])
    return "```\n{output}\n```".format(output=output.decode("utf-8"))

新错误:

  

计算机说没有。请参阅日志了解详情:   命令' [' C:\ WINDOWS \ system32 \ WindowsPowerShell \ v1.0 \ powershell.exe','。 " C:\ Program Files \ Toolbox \ PowerShell Modules \ Juniper./Juniper.psm1" ;;',' Test-juniperS2SVPN',' il1', ' 209.15.24.204',' 172.16.57.0/24',' 10.90.32.12/30']'返回非零退出状态1.

1 个答案:

答案 0 :(得分:1)

正如尼克所说,我确实使用argparse来解决这个问题,这是我的新代码:

@arg_botcmd('--dc', dest='DataCenter', type=str)
@arg_botcmd('--peerIp', dest='PeerPublicIp', type=str)
@arg_botcmd('--peerSubnet', dest='PeerSubnet', type=str)
@arg_botcmd('--ClcSubnet', dest='ClcSubnet', type=str)
def test_vpn(self, args, DataCenter=None, PeerPublicIp=None, PeerSubnet=None, ClcSubnet=None):
    """@monty test vpn —dc il1 —peerIp 209.15.24.204 —ClcSubnet 10.90.32.12/30 —peerSubnet 172.16.57.0/24"""
    output = subprocess.check_output([
        "C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\powershell.exe",
        ". \"C:\\Program Files\\Toolbox\\PowerShell Modules\\Juniper\\./Juniper.psm1\";",
        "Test-juniperS2SVPN",
        '-Datacenter', DataCenter,
        '-PeerPublicIp', PeerPublicIp,
        '-PeerSubnet', PeerSubnet,
        '-ClcSubnet', ClcSubnet,])
    return "```\n{output}\n```".format(output=output.decode("utf-8"))

将每个参数或参数设置为单个@arg_botcmd就是答案,以及对下面代码的一些更改,以便将参数正确传递给PowerShell。 " -DataCenter" PS中传递信息的参数名称,需要与Powershell完全匹配。

指向文档的链接:http://errbot.io/en/latest/user_guide/plugin_development/botcommands.html

第4.3节