Erlang: Comment accéder aux drapeaux (arguments) de la CLI en tant que variables d'environnement d'application?

StackOverflow https://stackoverflow.com/questions/1213108

Question

Comment accéder aux indicateurs de ligne de commande (arguments) en tant que variables d’environnement dans Erlang. (En tant que drapeaux, pas ARGV) Par exemple:

RabbitMQ cli ressemble à quelque chose comme:

erl \
...
-sasl errlog_type error \
-sasl sasl_error_logger '{file,"'${RABBITMQ_SASL_LOGS}'"}' \
... # more stuff here

Si vous regardez sasl.erl , vous voyez la ligne:

get_sasl_error_logger() ->
   case application:get_env(sasl, sasl_error_logger) of
% ... etc

Par magie inconnue, la variable sasl_error_logger devient un tuple erlang! J'ai essayé de le reproduire dans ma propre application erlang , mais il semble que je ne puisse accéder à ces valeurs que via init: get_argument , qui renvoie la valeur sous forme de chaîne.

Comment passer des valeurs via la ligne de commande et pouvoir y accéder facilement en termes erlang?

UPDATE Les personnes souhaitant utiliser des variables d'environnement de manière "normale" doivent également utiliser os: getenv ("THE_VAR")

.
Était-ce utile?

La solution

Assurez-vous de configurer un fichier de configuration d'application

{application, fred,
 [{description, "Your application"},
  {vsn, "1.0"},
  {modules, []},
  {registered,[]},
  {applications, [kernel,stdlib]},
  {env, [
    {param, 'fred'}
        ]
...

et vous pouvez ensuite définir votre ligne de commande comme suit:

-fred param 'billy'

Je pense que pour cela, vous devez disposer du paramètre dans la configuration de votre application. Je ne l'ai jamais fait autrement ...

Quelques informations supplémentaires (plus faciles que de les mettre dans un commentaire)

Compte tenu de cela

{emxconfig, {ets, [{keypos, 2}]}},

Je peux certainement le faire:

   {ok, {StorageType, Config}} = application:get_env(emxconfig),

mais (et cela peut être important), mon application est lancée à ce moment-là (il est peut-être nécessaire de simplement charger le logiciel et de ne pas commencer à regarder le code application_controller).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top