Pregunta

Realmente no entiendo cómo funcionan los argumentos de la línea de comando con los recipientes.Desde la manipulación, entiendo que los argumentos se pasan como una lista de cadenas a Main / 1.¿Cómo puedo analizar los argumentos pasados a Main?

Considere lo siguiente:

#!/usr/bin/env escript
usage() ->
  io:format("Usage: ~s <port#>~n",[escript:script_name()]),
  halt(1).

main([]) ->
  usage();
main(Args)->
  io:format("Starting test server on port #~s~n",[Args]).

Una prueba simple y todo se ve bien con solo un argumento.

  ./test_server.erl 17001
   Starting test server on port #17001

¿Qué pasa si paso en múltiples argumentos?

  ./test_server.erl 17001 8 9 abc
   Starting test server on port #1700189abc

eso no es lo que quería.Intenté dividir la cadena en el carácter del espacio:

  ....
  ArgsList = string:tokens(Args, " "),
  io:format("Length: ~w~n",[length(ArgsList)]),
  ....

rendimientos Longitud: 1

¿Fue útil?

Solución

Longitud (L)

length/1 es una función incorporada que puedeUse tal como es:

io:format("Length: ~p~n", [length(Args)])

Args

Args es una lista de cuerdas.Esta llamada (utilizando ~p como formato):

io:format("Starting test server on port #~p~n", [Args]).

daría el resultado:

./test_server.erl 17001 8 9 abc
Starting test server on port #["17001","8","9","abc"]

Si está utilizando ~s, Erlang lo interpreta como una cadena (o en realidad IO, realmente) y que se imprime con todo el elemento concatenado.

Para imprimir todos los argumentos uno por uno, intente esto en lugar de la llamada io:format/2:

[io:format("~s~n", [A]) || A <- Args].

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top