вызов сценария Python из jenkinsfile выводит стандартный вывод, но не возвращает возвращаемое значение - PullRequest
0 голосов
/ 12 февраля 2019

Я использую следующий скрипт py и запускаю его следующим скриптом groovy.Сам запуск выполняется с помощью 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.jenkinsfile - Groovy

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

Вывод, который я получаю:["arg"] примерно то, что я ожидал (фактически ожидал этого без [], но это не относится к делу).

Кажется, я не могу получить реальное возвращаемое значение объекта.почему text / dump / сама функция не возвращает возвращаемое значение?

пробовала также return main(sys.argv[1:]) вместо простого вызова main, но это подавило мой вывод x длякакая-то причина ...

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Вы ожидаете, что значение, возвращаемое функцией main(), будет передано в ОС в качестве кода возврата.

Это не так.Вам нужно явно передать его в ОС.

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

И вы получили ["arg"], потому что sys.argv[1:] запрашивает срез (то есть подсписок) sys.argv.Если вам нужен только один элемент, используйте sys.argv[1], который выбирает элемент 1.

0 голосов
/ 12 февраля 2019

, чтобы получить значение выхода, используйте func.exitValue().

метод execute() возвращает Обрабатывает экземпляр объекта, расширенный groovy дополнительными методами

скобками [], которые у вас есть, потому что в pythonВы получаете доступ к подсписку аргументов, начинающемуся с первого:

sys.argv[1:]

, как только этот метод доступа возвращает список (даже с одним элементом) - он выводится с [] на выходе.

если вы хотите получить только один элемент, используйте

sys.argv[1]
...