我想像这样传递多个参数:
@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.
答案 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节