Как перенаправить вывод на stderr в Groovy?

Я ищу способ перенаправить вывод в Groovy скрипте на stderr:

catch(Exception e) {
    println "Want this to go to stderr"
}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
30
0
17 098
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Groovy имеет доступ к JRE:

System.err.println "goes to stderr"

Хотя может быть и более интересный способ ...

Ага, я надеялся на отличный способ.

timdisney 19.12.2008 22:26
Ответ принят как подходящий

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

def printErr = System.err.&println
printErr("AHHH")

но это немного вручную

Можно даже переопределить println: (def println = System.err.&println) - полезно в начале скрипта, который записывает результаты в stdout чем-то вроде foo.write(System.in).

sfussenegger 12.02.2010 13:58

Это вызывает MissingMethodException, если используется с GString. Например, это не работает: printErr "Problem with: $aVariable"

Matthias Braun 19.08.2016 18:48

Поскольку этот ответ, вероятно, сильно устарел, я сделал его доступным для редактирования сообществом.

codeLes 26.08.2016 20:15

@MatthiasBraun Я не могу воспроизвести вашу ошибку на 2.4.12: она работает с GString.

Stefan van den Akker 11.08.2017 15:50

Если вам просто нужно напечатать что-то более короткое, есть два варианта. Во-первых, вы можете импортировать java.lang.System как угодно, особенно что-то более короткое, например "sys":

import java.lang.System as sys
sys.err.println("ERROR Will Robinson")

Во-вторых, вы можете назначить поток System.err переменной и с этого момента использовать эту переменную в качестве псевдонима для System.err, например:

err = System.err
err.println("ERROR again Will Robinson")

Возможное преимущество этого заключается в том, что доступны все функции System.err, поэтому вам не нужно подключать каждую из них по отдельности (например, err.print, err.println и т. д.).

Надеюсь, есть стандартный способ Groovy, потому что своеобразное переименование может сбивать с толку людей, читающих ваш код.

Еще одна довольно компактная альтернатива:

System.err << "Want this to go to stderr"

Или вы можете добавить это вверху вашего скрипта

def err = System.err
...
err << "Want this to go to stderr"

это то, что я сейчас делаю в своих отличных сценариях оболочки

Другие вопросы по теме