Используя Groovy, как мы можем вызвать скрипт Python в Windows с одним аргументом - PullRequest
0 голосов
/ 07 сентября 2018

Мне нужно запустить скрипт python в системе Windows, используя groovy script.

Пример:

python.exe c: /main.py аргумент1

Я новичок в Groovy и не знаю, как это сделать. Пожалуйста, поделитесь мне отличным синтаксисом для запуска Python, как указано в приведенном выше примере

Я готовлю этот сценарий для Дженкинса.

1 Ответ

0 голосов
/ 07 сентября 2018

Итак, "command".execute() - правильный старт. Но эта команда только запускает поток, и вы не ждете результата.

попробуйте этот код:

def task = "python main.py".execute()
task.waitFor()
println task.text

Эти строки запускают выполнение, ждут его завершения и выводят результат.

Чтобы выводить уже во время выполнения для более длительных задач, я написал себе небольшой помощник:

      String.metaClass.executeCmd = { silent ->
        //make sure that all paramters are interpreted through the cmd-shell
        //TODO: make this also work with *nix
        def p = "cmd /c ${delegate.value}".execute()
        def result = [std: '', err: '']
        def ready = false
        Thread.start {
            def reader = new BufferedReader(new InputStreamReader(p.in))
            def line = ""
            while ((line = reader.readLine()) != null) {
                if (silent != false) {
                    println "" + line
                }
                result.std += line + "\n"
            }
            ready = true
            reader.close()
        }
        p.waitForOrKill(30000)
        def error = p.err.text

        if (error.isEmpty()) {
            return result
        } else {
            throw new RuntimeException("\n" + error)
        }
    }

Это определяет через метапрограммирование новый метод String, называемый executeCmd.

Поместите это в верхнюю часть вашего файла, а затем в свою строку

"python c:/main.py".executeCmd()

Это должно показать вам все выходные данные во время выполнения , и это поможет вам правильно обработать параметры с помощью префикса "cmd /c". (Если вы просто вызываете execute для строки, вы часто сталкиваетесь с проблемами с пробелами и другими символами в вашей команде.

Если у вас уже есть параметры в виде списка и вам нужен код, который также работает на * nix-машине, попробуйте вызвать execute() в списке:

["python", "c:/main.py"].execute()

надеюсь, это поможет

пс: http://mrhaki.blogspot.com/2009/10/groovy-goodness-executing-string-or.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...