



Groovy имеет доступ к JRE:
System.err.println "goes to stderr"
Хотя может быть и более интересный способ ...
Я просто подумал, не могли бы вы сделать немного самоподключения:
def printErr = System.err.&println
printErr("AHHH")
но это немного вручную
Можно даже переопределить println: (def println = System.err.&println) - полезно в начале скрипта, который записывает результаты в stdout чем-то вроде foo.write(System.in).
Это вызывает MissingMethodException, если используется с GString. Например, это не работает: printErr "Problem with: $aVariable"
Поскольку этот ответ, вероятно, сильно устарел, я сделал его доступным для редактирования сообществом.
@MatthiasBraun Я не могу воспроизвести вашу ошибку на 2.4.12: она работает с GString.
Если вам просто нужно напечатать что-то более короткое, есть два варианта. Во-первых, вы можете импортировать 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"
это то, что я сейчас делаю в своих отличных сценариях оболочки
Ага, я надеялся на отличный способ.