使用参数在erlang中运行命令

使用参数在erlang中运行命令,erlang,xmpp,ejabberd,Erlang,Xmpp,Ejabberd,我正试图为ejabberd编写一个erlang模块,但无法完全理解语法 我要做的是,当用户发送脱机消息时,运行我编写的脚本 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

我正试图为ejabberd编写一个erlang模块,但无法完全理解语法

我要做的是,当用户发送脱机消息时,运行我编写的脚本

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(:ejabberd_hooks:294):{function_子句

然而,即使我在没有++的情况下运行它,我也会收到另一个错误,告诉我匹配不好


我只想用用户ID的第一部分运行handleoffline.py,有人有什么建议吗?

从您提供的少量信息中,假设您的函数正在使用ejabberd离线消息\u hook调用,我至少可以找到一个问题。 在

您正试图使用++将您提供的列表连接到。但主要问题是不是字符串(列表),这会产生错误。函数的形式为

on_offline(From, To, Packet) -> ok
在哪里 ==#jid(见)

纠正这种情况的一种方法是使用

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.
因为#jid上的字段user是一个字符串

编辑:另一个错误是您需要将osReturn更改为osReturn,因为第一个是atom,将在您的代码中引发错误,正如前面指出的那样



如果您有更多问题,请编辑您的问题并添加更多信息,或者让问题更清楚。

从您提供的少量信息中,假设您的函数正在使用ejabberd离线消息\u hook调用,我至少可以找到一个问题。 在

您正试图使用++将您提供的列表连接到。但主要问题是不是字符串(列表),这会产生错误。函数的形式为

on_offline(From, To, Packet) -> ok
在哪里 ==#jid(见)

纠正这种情况的一种方法是使用

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.
因为#jid上的字段user是一个字符串

编辑:另一个错误是您需要将osReturn更改为osReturn,因为第一个是atom,将在您的代码中引发错误,正如前面指出的那样



如果您有更多问题,请编辑您的问题并添加更多信息,或者让问题更清楚。

请发布完整错误和不带++的代码。一个错误是osReturn是atom,应该是osReturn。请发布完整错误和不带++的代码。一个错误是osReturn是atom,应该是osReturn