Erlang escript argumentos
-
14-11-2019 - |
Pergunta
Eu realmente não entendo como argumentos de linha de comando trabalhar com escripts.A partir da página de manual, entendo que os argumentos são passados como uma lista de cadeias de caracteres para o main/1.Como posso analisar os argumentos passados para o principal?
Considere o seguinte:
#!/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]).
Um teste simples e tudo parece boa, com apenas um argumento.
./test_server.erl 17001
Starting test server on port #17001
Que tal se eu passar vários argumentos?
./test_server.erl 17001 8 9 abc
Starting test server on port #1700189abc
Não era o que eu queria.Eu tentei spliiting a cadeia de caracteres no espaço de caractere:
....
ArgsList = string:tokens(Args, " "),
io:format("Length: ~w~n",[length(ArgsList)]),
....
Rendimentos Comprimento:1
Solução
comprimento(L)
length/1
é construído em função de que você pode usar só como é:
io:format("Length: ~p~n", [length(Args)])
Args
Args
é uma lista de cadeias de caracteres.Esta chamada (usando ~p
como o formato):
io:format("Starting test server on port #~p~n", [Args]).
Teria o resultado:
./test_server.erl 17001 8 9 abc
Starting test server on port #["17001","8","9","abc"]
Se você estiver usando ~s
, Erlang interpreta-lo como uma seqüência de caracteres (ou IO lista, realmente) e que seja impressa com todos os elemento concatenado.
Para imprimir todos os argumentos um por um, tenta este, em vez de io:format/2
chamada:
[io:format("~s~n", [A]) || A <- Args].