我从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将参数传递给函数。为什么函数看不到所需的参数?
4条答案
按热度按时间cnh2zyt31#
你正在传递一个包含所有参数的 list。请注意这两者的不同之处。
字符串
和/或
型
在第一种情况下,您传递的是单个对象。使用第二个。
PrintTestCases
需要4个distincts参数,但是通过传递[str(authentication), str(style), str(ip), str(accounting)]
,实际上您将此列表单独作为authentication
参数,其他参数未填充。2nc8po8w2#
您正在传递一个列表作为输入,该列表仅计为第一个输入。相反,您应该将它们作为参数传递给函数。将
PrintTestCases([str(authentication), str(style), str(ip), str(accounting)])
替换为PrintTestCases(str(authentication), str(style), str(ip), str(accounting))
,它应该可以工作。watbbzwu3#
这只是因为你传递了一个列表给
PrintTestCases
函数。拆下支架,它就固定好了。smdnsysy4#
为什么不使用argparse来处理这些参数呢?您可以轻松定义所需的参数,并根据需要将其中一些参数设置为可选参数。
字符串