使用参数在erlang中运行命令
我正试图为ejabberd编写一个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
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