Comment lire les variables d'environnement dans Scala


Réponses:


232

Depuis Scala 2.9, vous pouvez utiliser sys.envpour le même effet:

scala> sys.env("HOME")
res0: String = /home/paradigmatic

Je pense que c'est bien d'utiliser l'API Scala au lieu de Java. Il existe actuellement plusieurs projets pour compiler Scala vers d'autres plates-formes que JVM (.NET, javascript, natif, etc.) La réduction des dépendances sur l'API Java rendra votre code plus portable.


96
Il est probablement préférable d'utiliser sys.env.get("VARIABLE")ce qui vous donnera Option[String]une erreur plutôt que de lancer une erreur si cette variable est manquante.
Cristian Vrabie

4
@CristianVrabie Je le préférerais aussi, dans la plupart des cas. Mais sys.envc'est juste un Map. Vous pouvez utiliser la méthode qui vous convient.
paradigmatic

3
sys.env.getOrElse("VARIABLE", "default value")était également utile dans mon cas où la variable d'environnement peut ne pas être définie.
Josh Peak

131

Il y a un objet:

scala.util.Properties

cela a une collection de méthodes qui peuvent être utilisées pour obtenir des informations sur l'environnement, y compris

scala.util.Properties.envOrElse("HOME", "/myhome" )

3
Je préférerais également les propriétés. Il permet de récupérer des options et a des noms pour les propriétés couramment utilisées.
ppopoff

25

De la même façon:

scala> System.getenv("HOME")
res0: java.lang.String = /Users/dhg

Maintenant que j'utilise Scala au quotidien, je dois déplacer la réponse acceptée vers la réponse de @ paradigmatic. Il utilise l'API Scala et s'il est utilisé comme suggéré dans les commentaires, il peut renvoyer une option.
summerbulb

11

En utilisant directement une valeur par défaut avec getOrElsesur la sys.envcarte ( val myenv: Map[String, String] = sys.env):

sys.env.getOrElse(envVariable, defaultValue)

Vous obtenez le contenu du envVariableou, s'il n'existe pas, le defaultValue.



0

Pour imprimer toutes les variables d'environnement, vous pouvez utiliser

System.getenv.forEach((name, value) => println(s"$name: $value"))

1
error: missing parameter typesur les arguments si vous venez de copier-coller ceci.
thundergolfer

@thundergolfer: Je n'ai actuellement pas installé Scala sur ma machine. Avez-vous découvert ce qui manquait?
Matthias Braun

Après avoir changé les paramètres en (name: String, value: String), je reçois error: type mismatch; found : (String, String) => Unit required: java.util.function.BiConsumer[_ >: String, _ >: String].
Roland Weber

1
Voici quelque chose qui fonctionne, mais qui nécessite une importation: alvinalexander.com/scala/…
Roland Weber
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.