Erlang escript аргументы - PullRequest
       17

Erlang escript аргументы

2 голосов
/ 15 февраля 2011

Я не очень понимаю, как аргументы командной строки работают со сценариями.Из справочной страницы я понимаю, что аргументы передаются в виде списка строк в main / 1.Как я могу разобрать аргументы, переданные в main?

Рассмотрим следующее:

#!/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]).

Простой тест, и все выглядит хорошо только с одним аргументом.А что если я передам несколько аргументов?

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

Это не то, что я хотел.Я попытался разделить строку на символ пробела:

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

Длина выходов: 1

1 Ответ

7 голосов
/ 15 февраля 2011

длина (L)

length/1 - это встроенная функция, которую вы можете использовать так же, как:

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

Args

Args - список строк. Этот вызов (используя ~p в качестве формата):

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

даст результат:

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

Если вы используете ~s, Эрланг интерпретирует его как строку (или список ввода-вывода, на самом деле), и это печатается со всеми объединенными элементами.

Чтобы распечатать все аргументы один за другим, попробуйте это вместо вызова io:format/2:

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