2012-02-29 9 views
0

ejabberd用のerlangモジュールを作成しようとしていますが、構文をうまく解決できません。パラメータを使用して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(< 0.423.0>:ejabberd_hooks:294):取得そこへ++を持っている場合、私は、いくつかのエラーを取得{function_clauseを、

しかし、私が++なしで実行したとしても、Bad Matchと言っている別のエラーが出ます。

私がやってみたいのは、ユーザーIDの最初の部分でhandleoffline.pyを実行するだけです。誰にでも何か提案がありますか?

+1

++を除いて、完全なエラーとコードを投稿してください。 – Isac

+1

1つのエラーは、osReturnが原子であり、OsReturn – selle

答えて

4

あなたが提供した小さな情報から、関数がejabberdで呼び出されていると仮定してoffline_message_hook私は少なくとも問題を見つけることができます。

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

では、あなたがにで提供されたリストを連結する++を使用しようとしています。しかし、大きな問題は、が文字列(リスト)でないことで、エラーが発生することです。あなたの関数は

on_offline(From, To, Packet) -> ok 

から= =に#jidjlibを参照)ことが

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は文字列です。

編集:他のエラーは最初の原子であるので、あなたがOsReturnにチャンosReturnに必要ということで、selleは、あなたの質問を編集


を指摘し、より多くの情報を追加するように、あなたのコードにエラーが発生しますあなたがより多くの問題を抱えている場合、またはこれをより明確にする。

関連する問題