Преобразовние string в команду.

7 views
Skip to first unread message

LambdaMan

unread,
Nov 13, 2009, 3:23:52 AM11/13/09
to Erlang в России
Возможно ли это? Или как можно передать стандартную функцию через
сокет на выполнение. Мне нужно отправить(как, неважно), так чтобы эта
команда выполнилась на другой машине.

Alex Kutsko

unread,
Nov 13, 2009, 3:35:04 AM11/13/09
to erlang-...@googlegroups.com
M = list_to_atom("io").
io
5> F=list_to_atom("format").
format
6> M:F("test").
test

2009/11/13 LambdaMan <lambd...@gmail.com>

Возможно ли это? Или как можно передать стандартную функцию через
сокет на выполнение. Мне нужно отправить(как, неважно), так чтобы эта
команда выполнилась на другой машине.




--
Best regards,
Alex Kutsko

Valentin Nechayev

unread,
Nov 13, 2009, 3:36:39 AM11/13/09
to erlang-...@googlegroups.com

2009/11/13 LambdaMan <lambd...@gmail.com>

Возможно ли это? Или как можно передать стандартную функцию через
сокет на выполнение. Мне нужно отправить(как, неважно), так чтобы эта
команда выполнилась на другой машине.

rpc:eval_everywhere/4 - похоже?

--
-netch-

Dmitrii Dimandt

unread,
Nov 13, 2009, 3:37:02 AM11/13/09
to erlang-...@googlegroups.com

Передавать просто атомом. Например,

Module = m,
Func = f,
Args = [1,2,3]
Pid ! {Module, Func, Args}.


В Pid выполняем:

receive
%% делаем вызов m:f(1,2,3)
{Module, Func, Args} -> apply(Module, Func, Args)
end

Alexey Kishkin

unread,
Nov 13, 2009, 3:37:29 AM11/13/09
to erlang-...@googlegroups.com
А почему нельзя явно выполнить эту команду на нужной ноде через rpc:call ?

http://erldocs.com/otp_src_R13B/kernel/rpc.html?search=rpc&i=1#call/4

LambdaMan пишет:

LambdaMan

unread,
Nov 13, 2009, 3:38:11 AM11/13/09
to Erlang в России
Thanks

On Nov 13, 11:35 am, Alex Kutsko <alex.kut...@itteco.com> wrote:
> M = list_to_atom("io").
> io
> 5> F=list_to_atom("format").
> format
> 6> M:F("test").
> test
>
> Best regards,
> Alex Kutsko

LambdaMan

unread,
Nov 13, 2009, 3:44:48 AM11/13/09
to Erlang в России
Мне бы это сделать не сильно заметно. так что call отметаю. Alex
Kutsko спасибо попробую сделать.

Alexey Kishkin

unread,
Nov 13, 2009, 3:49:38 AM11/13/09
to erlang-...@googlegroups.com
Не заметно для кого???

LambdaMan пишет:

LambdaMan

unread,
Nov 13, 2009, 3:52:30 AM11/13/09
to Erlang в России
Чтоб в исходном коде, человеку не сильно в этом разбирающемся не было
понятно.
On Nov 13, 11:49 am, Alexey Kishkin <aleksey.kish...@gmail.com> wrote:
> Не заметно для кого???

Maxim Treskin

unread,
Nov 13, 2009, 3:54:32 AM11/13/09
to erlang-...@googlegroups.com
Кто-то в чей-то код пытается бэкдор втулить?

--
Maxim Treskin

LambdaMan

unread,
Nov 13, 2009, 3:55:34 AM11/13/09
to Erlang в России
Нет скорей в свой код. Даже не спрашивай зачем.

Artem Semenov

unread,
Nov 13, 2009, 4:54:38 AM11/13/09
to erlang-...@googlegroups.com
Какой нечестный разработчик. Ай-яй-яй.

13 ноября 2009 г. 11:55 пользователь LambdaMan <lambd...@gmail.com> написал:

LambdaMan

unread,
Nov 13, 2009, 6:06:17 AM11/13/09
to Erlang в России
Еще вопрос как можно сделать конкатенацию атомов кроме как:

f(A,B)-> list_to_atom(atom_to_list(B)++atom_to_list(A)).

Dmitriy Kov

unread,
Nov 13, 2009, 6:12:58 AM11/13/09
to Erlang в России
list_to_atom(lists:concat([A,B])).

Alex Kutsko

unread,
Nov 13, 2009, 6:13:31 AM11/13/09
to erlang-...@googlegroups.com
Тут неплохой пример насчет этого:
http://stackoverflow.com/questions/1423054/erlang-is-there-an-equivalent-to-the-c-preprocessor-directive


2009/11/13 LambdaMan <lambd...@gmail.com>

Еще вопрос как можно сделать конкатенацию атомов кроме как:

f(A,B)-> list_to_atom(atom_to_list(B)++atom_to_list(A)).

Иван

unread,
Nov 13, 2009, 6:56:32 AM11/13/09
to Erlang в России
Вы только не забывайте, что с помощью list_to_atom можно положить
ноду.

LambdaMan

unread,
Nov 13, 2009, 7:02:43 AM11/13/09
to Erlang в России
Я в курсе ... и это хорошо.

LambdaMan

unread,
Nov 13, 2009, 7:14:37 AM11/13/09
to Erlang в России
И сразу уз еще один вопрос.

catch lists:foreach(mnesia:infos(), mnesia:system_info(tables)).

ловлю ошибку , она выводится.
Но не могу пуместит ее в переменную:

Ошибка имеет следующий вид :
{'EXIT',{function_clause,[{mnesia,'-display_tab_info/0-fun-2-',
[amnesia_bank]},
{lists,foreach,2},
{b,aa,19},
{erl_eval,do_apply,5},
{shell,exprs,6},
{shell,eval_exprs,6},
{shell,eval_loop,3}]}}

Записываю сюда: {_,{_,[Data,{_,_,_},{_,_,_},{_,_,_},{_,_,_},{_,_,_},
{_,_,_}]}}

Не компилится.

LambdaMan

unread,
Nov 13, 2009, 7:39:44 AM11/13/09
to Erlang в России
Все, разобрался

{_,{_,[{_,_,[Data]},{_,_,_},{_,_,_},{_,_,_},{_,_,_},{_,_,_},{_,_,_}]}}
вот так надо было.

Иван

unread,
Nov 13, 2009, 8:25:31 AM11/13/09
to Erlang в России
А зачем так сложно?
{_, {_, [{_, _, [D]} | _]}}

LambdaMan

unread,
Nov 13, 2009, 3:12:19 PM11/13/09
to Erlang в России
Ну да впринципе)

LambdaMan

unread,
Nov 18, 2009, 1:45:54 PM11/18/09
to Erlang в России
Кстати есть ли возможность выполнить подсоединение к ноде и там
выполнять команды? нечто вроде ssh?

Valentin Nechayev

unread,
Nov 18, 2009, 2:07:27 PM11/18/09
to erlang-...@googlegroups.com
2009/11/18 LambdaMan <lambd...@gmail.com> wrote:
Кстати есть ли возможность выполнить подсоединение к ноде и там
выполнять команды? нечто вроде ssh?

Модуль rpc не смотрели?
 
-netch-

LambdaMan

unread,
Nov 18, 2009, 2:26:06 PM11/18/09
to Erlang в России
нет. спасибо.

On Nov 18, 10:07 pm, Valentin Nechayev <net...@gmail.com> wrote:

Max Lapshin

unread,
Nov 18, 2009, 2:41:31 PM11/18/09
to erlang-...@googlegroups.com
Есть ещё erl -remsh remote_node@remote_host

Дмитрий Омелечко

unread,
Nov 19, 2009, 3:09:58 AM11/19/09
to erlang-...@googlegroups.com
rpc + os:cmd

18 ноября 2009 г. 21:41 пользователь Max Lapshin <max.l...@gmail.com> написал:
Reply all
Reply to author
Forward
0 new messages