从 Jenkinsfile 调用 Python 脚本会打印 stdout,但不返回返回值



我正在使用以下py脚本并使用以下时髦脚本触发它。触发本身由groovy b.jenkinsfile完成:

a.py - Python 2.7

import sys
def main(x):
    print x
    return 2
if __name__ == '__main__':
    main(sys.argv[1:])

b.詹金斯文件 - 时髦

def cmd = ["python", "a.py", "arg"]
def func = cmd.execute()
func.waitForOrKill(10000)
println func.text
func.dump()
println func

得到的输出是 ["arg"],这大约是我预期的(实际上没有 [] 就预料到了,但这无关紧要(。

我似乎无法获得对象的实际返回值。 为什么text/dump/func 本身不会给出返回值?

也尝试了return main(sys.argv[1:])而不是普通的呼叫main,但由于某种原因,这抑制了我的打印 x......

要获取退出值,请使用func.exitValue()

方法execute()返回由Groovy使用其他方法扩展的Process对象实例

您拥有的[]括号,因为在 Python 中您正在访问从第一个参数开始的参数子列表:

sys.argv[1:]

一旦这个访问器返回一个列表(即使只有一个元素( - 它在输出时用[]包装。

如果您只想获得一个元素使用

sys.argv[1]

您希望函数返回的值main()作为返回代码传递给操作系统。

其实不然。您需要将其显式传递给操作系统。

rc = main(sys.argv[1:])
sys.exit(rc)

你得到了["arg"],因为sys.argv[1:]要求sys.argv的切片(即子列表(。如果您只需要一个元素,请使用选择元素 1 的 sys.argv[1]

最新更新