Запустите команду в erlang с параметром - PullRequest
0 голосов
/ 29 февраля 2012

Я пытаюсь написать модуль erlang для ejabberd и не могу понять синтаксис.

То, что я пытаюсь сделать, - это когда пользователь отправляет автономное сообщение, запускаю сценарий, который я написал.

on_offline(_From, To, _Packet) ->
        ?INFO_MSG("recieved offline packet to ~p", [To]),
        ?INFO_MSG("Got offline message", []),
        osReturn = os:cmd("/opt/ejabberd-2.1.10/newmods/handleoffline.py " ++ To),
        ?INFO_MSG("Send to handler and got return ~s", [osReturn]),
        none.

Однако, когда я запускаю его, я получаю несколько ошибок, если у меня ++. Там я получаю ошибку

E (<0.423.0>: ejabberd_hooks: 294): {function_clause,

Однако, даже если я запускаю его без ++, я получаю еще одну ошибку, сообщающую мне Bad Match.

Все, что я хотел бы сделать, это запустить handleoffline.py с первой частью идентификатора пользователя, кто-нибудь получил какие-либо предложения?

1 Ответ

4 голосов
/ 29 февраля 2012

Из небольшой предоставленной вами информации и предположения, что ваши функции вызываются с помощью ejabberd offline_message_hook Я, по крайней мере, могу найти проблему.В

osReturn = os:cmd("/opt/ejabberd-2.1.10/newmods/handleoffline.py " ++ To)

вы пытаетесь использовать ++ для объединения списка, который вы предоставили с To .Но главная проблема в том, что To не является строкой (списком), и это порождает вашу ошибку.Ваша функция имеет вид

on_offline(From, To, Packet) -> ok

, где К = С = # jid (см. jlib )

один из способов исправить это использовать

on_offline(_From, To=#jid{user = User, server=Server}, _Packet) ->
  ...
  OsReturn = os:cmd("/opt/ejabberd-2.1.10/newmods/handleoffline.py " ++ User),
  ?INFO_MSG("Send to handler and got return ~s", [OsReturn]),
  none.

, потому что поле user on # jid является строкой.

Редактировать: другая ошибка заключается в том, что вам нужно изменить osReturn на OsReturn, потому что первый является атомом и вызовет ошибку в вашем коде, как selle указал


Отредактируйте свой вопрос и добавьте больше информации, если у вас есть больше проблем, или чтобы прояснить этот вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...