jenkins sys.argv []缺少3个必需的位置参数

6bc51xsx  于 2023-08-03  发布在  Jenkins
关注(0)|答案(4)|浏览(111)

我从Jenkins管道调用的Python脚本有问题。在主脚本中,我有这个:

import sys

authentication = sys.argv[1]
style = sys.argv[2]
ip = sys.argv[3]
accounting = sys.argv[4]

PrintTestCases([str(authentication), str(style), str(ip), str(accounting)])

字符串
函数PrintTestCases在另一个文件中,使用match-case结构

def PrintTestCases(authentication, style, ip, accounting):
    match accounting:
        case "NOACC":
            match [authentication, style, ip]:
               case ['NONE', 'NONE', 'NONE']:
                    print("Test Case Number 1")
                case _:
                        print("Wrong Test Case")
        case "ACC":
              match [authentication, style, ip]:
                case ['PRIVATE', 'NONE', 'NONE']:
                    print( "Test Case Number 2")
                case _:
                        print("Wrong Test Case")


然后从Jenkins管道调用主脚本,如下所示

python3 -u main NONE NONE NONE ACC


但我总是得到这个错误

PrintTestCases() missing 3 required positional arguments: 'style', 'ip', and 'accounting'


根据我的理解,我通过sys.argv将参数传递给函数。为什么函数看不到所需的参数?

cnh2zyt3

cnh2zyt31#

你正在传递一个包含所有参数的 list。请注意这两者的不同之处。

PrintTestCases([str(authentication), str(style), str(ip), str(accounting)])

字符串
和/或

PrintTestCases(str(authentication), str(style), str(ip), str(accounting))


在第一种情况下,您传递的是单个对象。使用第二个。
PrintTestCases需要4个distincts参数,但是通过传递[str(authentication), str(style), str(ip), str(accounting)],实际上您将此列表单独作为authentication参数,其他参数未填充。

2nc8po8w

2nc8po8w2#

您正在传递一个列表作为输入,该列表仅计为第一个输入。相反,您应该将它们作为参数传递给函数。将PrintTestCases([str(authentication), str(style), str(ip), str(accounting)])替换为PrintTestCases(str(authentication), str(style), str(ip), str(accounting)),它应该可以工作。

watbbzwu

watbbzwu3#

这只是因为你传递了一个列表给PrintTestCases函数。拆下支架,它就固定好了。

smdnsysy

smdnsysy4#

为什么不使用argparse来处理这些参数呢?您可以轻松定义所需的参数,并根据需要将其中一些参数设置为可选参数。

import argparse

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("authentication", help="The authentication method")
    parser.add_argument("style", help="The style")
    parser.add_argument("ip", help="The IP address")
    parser.add_argument("accounting", help="The accounting method")
    args = parser.parse_args()
    PrintTestCases([str(args.authentication), str(args.style), str(args.ip), str(args.accounting)])

字符串

相关问题