2008-12-19 7 views

Répondre

20

Situé juste à côté du haut de ma tête ne pouvait pas vous faire un peu d'auto-câblage:

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

mais c'est un peu manuel

+1

Il est même possible de redéfinir println: ('def println = System.err. & Println') - utile au début d'un script qui écrit des résultats sur stdout par quelque chose comme' foo.write (System.in) ' – sfussenegger

+0

Ceci jette un 'MissingMethodException' s'il est utilisé avec un GString. Par exemple cela ne fonctionne pas: 'printErr" Problème avec: $ aVariable "' –

+0

Comme cette réponse est probablement grossièrement obsolète, je l'ai rendue modifiable par la communauté. – codeLes

14

Groovy a accès au JRE:

System.err.println "goes to stderr" 

Bien qu'il puisse y avoir un moyen plus Groovy-fiée ...

+0

Oui, j'espérais une façon groovy. – timdisney

1

Si vous voulez juste quelque chose de plus court à taper, voici deux options. Tout d'abord, vous pouvez importer java.lang.System comme tout ce que vous aimez, en particulier quelque chose de plus court comme « sys »:

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

Deuxièmement, vous pouvez affecter le flux System.err à une variable et utiliser cette variable à partir de là comme un alias pour System.err, comme:

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

Ceci a l'avantage possible que toutes les fonctions de System.err sont accessibles afin que vous ne devez pas câbler chacun individuellement (par exemple err.print, err.println, etc.).

Espérons qu'il existe une méthode Groovy standard, car un changement de nom idiosyncratique peut être source de confusion pour les personnes qui lisent votre code.

19

Une autre alternative assez compact est le suivant:

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

Ou vous pouvez ajouter ceci au début de votre script

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

qui est ce que je fais maintenant dans mes scripts Groovy shell

Questions connexes