Erlang和bash脚本(escript)
我在Erlang中非常新,想将Bash脚本与Erlang节点和函数合并. 我有一个MNESIA数据库,我们进入Erlang节点并运行多个函数,但我想通过一些Bash脚本运行这些功能,以便我可以在其他地方使用这些bash脚本输出. 我的erlang壳: - sudo /opt/butler_server/bin/butler_server remote_console Erlang/OTP 20 [erts-9.3.3.6] [source] [64-bit] [smp:28:28] [ds:28:28:10] [async-threads:10] Eshell V9.3.3.6 (abort with ^G) (butler_server@localhost)1> 和在此外壳内部运行以下功能时,它运行良好并给出输出,请注意订单_node,pps_manager是数据库中的模块名称和get_by_id,send_order_related_notification,upd
8 2024-03-28
编程技术问答社区
匿名函数和模式匹配
我试图理解如何给出不同的函数不同的参数,以及作为参数传递给匿名函数的内容.尝试将其与模式匹配相关联. 我已经看了: 这里说: fun(Args1) -> Expression1, Exp2, ..., ExpN; (Args2) -> Expression1, Exp2, ..., ExpN; (Args3) -> Expression1, Exp2, ..., ExpN end 我想我可以通过不同的论点并获得不同的模式.但是我已经制定了以下代码: mkt(add, {V1, C}) -> fun(new) -> {changed_value, V1, C}; ({exst_value, V2}) -> try V1 + V2 of Res -> {changed_value, Res, C} catch _:_ -> nothing end end;
12 2024-02-26
编程技术问答社区
On_load_function_failed : cberl_nif (Erlang)
我正在使用 https://github.com/chitika/cberl . 我当前的应用程序版本是1.2.1.运行良好.我创建了一个新的版本1.2.2,该版本升级了.但是当我启动新实例时,它在1.2.2上失败了.它继续扔CBERL错误. 如果我启动Prev版本1.2.1,然后再次将其升级到1.2.2,则可以正常工作.但是从头开始就不会. 我的应用程序(例如测试)无法启动. 命令我使用了:bin/test console. 使用的OTP版本:18.2. 在OTP 18.2上编译. Linux版本:3.2.0-4-AMD64#1 SMP Debian 3.2.63-2 X86_64 GNU/Linux. 完整错误消息: erl_crash.dump 口号:内核PID终止(application_controller)({application_start_failure,kernel,{{shutdown,{failed_to_tod_start
32 2023-04-07
编程技术问答社区
埃尔朗试图评估一个字符串
我正在尝试动态评估erlang术语 启动Erlang basho-catah% erl Erlang R16B03 (erts-5.10.4) [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] Eshell V5.10.4 (abort with ^G) 创建一个术语 1> {a,[b,c,d]}. {a,[b,c,d]} 尝试在同一术语中扫描 2> {ok, Tokens, _ } = erl_scan:string("{a,[b,c,d]}"). {ok,[{'{',1}, {atom,1,a}, {',',1}, {'[',1}, {atom,1,b}, {',',1}, {atom,1,c}, {',',1}, {atom,1,d}, {']',1},
16 2022-09-12
编程技术问答社区
Erlang 进程间的消息传递
我正在编写读取两个输入文件的代码,并检查第二个文件中第一个文件中的单词是否存在.我想通过流程消息传递来一一检查列表的元素. 这是我的代码: start()-> Pid2 = spawn(?MODULE,check2,[]), spawn(?MODULE,check1,[Pid2]). check1(Pid2) -> {ok, Data} = file:read_file("input.txt"), B = binary:split(Data, [ {ok,IoDevice} = file:open("check.txt", [read]), L = string:tokens(io:get_line
84 2022-09-11
编程技术问答社区
ets和读取文件的错误
免责声明:我没有编写此代码,我只是想让它起作用. 我正在尝试从 动作的顺序如下: 我正在做的如下: 克隆代码 cd用代码到文件夹,erl在终端中 make:all([load]). polis:create(). polis:start(). benchmarker:start(slidingwindow50). 我遇到的错误是: 4> benchmarker:start(slidingwindow50). true Dimensions:4, Plasticity:none Dimensions:4, Plasticity:none Dimensions:4, Plasticity:none Dimensions:4, Plasticity:none Dimensions:4, Plasticity:none Dimensions:4, Plasticity:none Dimensions:4, Plasticity:none Dimensions:
66 2022-09-11
编程技术问答社区
如何在Erlang中正确运行一组TWEANN的基准?
我一直在阅读Gene i Sher的手册,通过Erlang ,并试图复制那里描述的所有实验. 一切都起作用了,直到我来到第19章 > 设置了所有内容后,我们为每个著名的实验设置执行基准,并将其运行到完成.为此,我们只需修改benchmarker模块中使用的约束,然后为我们的每个实验设置执行 benchmarker:start(Experiment_Name) . 总共有14个实验,命名: 1. [slidwindow5] 2. [slidwindow10] 3. [slidwindow20] 4. [slidingwindow50] 5. [slidwindow100] 和 1. [ChartPlane5x10] 2. [ChartPlane5x20] 3. [ChartPlane10x10] 4. [ChartPlane10x20] 5. [ChartPlane20x10] 6. [ChartPlane20x20] 7. [ChartP
88 2022-09-11
编程技术问答社区
我可以在另一个应用程序或模块中使用现有的OTP应用程序吗?
我正在构建一个需要使用先前构建的OTP应用程序的系统(我们称其为X).如果我想构建一个新的OTP应用程序/模块,例如? 我以为我可以打电话start,因为它遵循application行为,因此我构建了一个具有以下代码的简约应用程序y: y.erl: -module(y). -behaviour(application). start(_StartType, _StartArgs) -> io:format("going to call x_app~n"), {ok, _} = x_app:start([]), io:format("called x_app~n"), y:start_link(). stop(_State) -> ok = x_app:stop([]), ok. 钢筋成功地编译了此代码并没有生成任何警告. rel/y/bin/y start根本没有输出(我希望至少输出一个io:format) rel/y/bin/y stop
116 2022-09-11
编程技术问答社区
Riak数据库上的Erlang MapReduce出现异常
我正在通过Riak和Erlang的教程,我已经由Riak-Erlang-Client存储在Riak中,我做了以下操作: 1> {ok,Pid} = riakc_pb_socket:start_link("127.0.0.1", 8087). {ok,} 2> Val1 = [1,2,3]. [1,2,3] 3> MyBucket = >. > 4> Obj1 = riakc_obj:new(MyBucket,>,Val1). 5> riakc_pb_socket:put(Pid,Obj1). ok 6> {ok, Fetched} = riakc_pb_socket:get(Pid,MyBucket,>). {ok,{riakc_obj,>,>,
44 2022-09-11
编程技术问答社区
为什么我在: '{'之前会出现语法错误?
在玩 erlang开始 我在琐碎用例(简单的地图初始化)上遇到了奇异的语法错误.有什么建议为什么会发生? 1> #{ "key" => 42}. 1:语法错误之前:'{' 详细信息: erlang r16b03(Erts-5.10.4),Eshell v5.10.4. 解决方案 因为在Erlang 17中引入了地图. 您必须升级安装或不使用地图.
18 2022-09-11
编程技术问答社区
埃尔朗案例声明
我有以下Erlang代码,它在我尝试编译时给出了如下警告,但这很有意义.功能需要两个参数,但是我需要匹配"其他所有"而不是x,y或z. -module(crop). -export([fall_velocity/2]). fall_velocity(P, D) when D >= 0 -> case P of x -> math:sqrt(2 * 9.8 * D); y -> math:sqrt(2 * 1.6 * D); z -> math:sqrt(2 * 3.71 * D); (_)-> io:format("no match:~p~n") end. crop.erl:9: Warning: wrong number of arguments in format call. 我在IO:格式之后尝试了一个匿名变量,但仍然不满意. 解决方案 在您使用〜p的格式中.这意味着 - 打印值.因此,您必须指定要打印的值. 最后一行必须为 _ -> io:fo
32 2022-09-11
编程技术问答社区
如何在Erlang中向一个进程列表广播消息?控制台挂起
我是Erlang的新手,我正在尝试了解如何将消息从一个过程发送到一个流程列表. 据说我们有一个数据结构,该数据结构包含一个包含字符串和PID元素的列表.如何使PID向PID发送消息" M",这是先前描述的两个元素之一? 我想到的是: broadcast(P, M, R) -> P ! {self(), friends}, receive {P, Friends} -> P ! {self(), {send_message, {M, R, P, Friends}}} end. looper({Name, Friends, Messages}) -> receive {From, friends} -> From ! {self(), Friends}, looper({Name, Friends, Messages}); {From, {send_message, {M, R, ID, [{FriendPid, FriendNa
20 2022-09-11
编程技术问答社区
如何在交互式Erlang会话中解除变量的绑定?
在erlang互动壳中您可以将变量绑定到值.如果我想清除所有内容并从头开始而不退出会话并开始新会议,我该怎么办? ,如果我只想重复使用一个变量,是否可以重新绑定? 解决方案 使用F()和F(var): 1> A = 1, B = 2. 2 2> f(A). ok 3> A. * 1: variable 'A' is unbound 4> B. 2 5> f(). ok 6> B. * 1: variable 'B' is unbound 7> shell命令实际上是" C"模块中的函数: http://www.erlang.org/doc/doc/man/c.html 其他解决方案 ,如果我只想重复使用一个变量,是否可以重新绑定? 是的,当您"解开"(f(val) - 忘记)时,您可以再次绑定(匹配)的值.不用说它只能在Erlang Shell中起作用.
24 2022-09-11
编程技术问答社区
如何使用os:cmd/1在Erlang中执行系统命令并获得结果?
当我尝试执行以下命令以返回错误或不退出Windows上的命令时,我总是会获取空列表,而不是返回的错误作为字符串,例如: 我得到: [] = os:cmd("blah"). 而不是 之类的东西 "command not found" = os:cmd("blah"). 在Linux中 - 一切都按预期工作,所以我得到"/bin/sh:line 1:blah:找不到命令\ n" 因此,当我需要知道执行方式等时,我不能依靠该功能. 请提出一些通用方法如何执行命令并获取结果,包括错误代码. 谢谢! 解决方案 我根本不熟悉Windows,但我敢肯定,您应该看 this .这是实现os:cmd/1函数. os:cmd/1有问题.此函数不会让您知道,命令执行是否成功,因此您只需要依靠某些命令shell行为(这是平台依赖的). 我建议您使用erlang:open_port/2函数.这样的东西: my_exec(Command) ->
36 2022-09-11
编程技术问答社区
什么会导致`net_adm`内核Erlang模块不可用?
使用 安装了Erlang(从19到22释放) NIX软件包管理器 apt 并从Source编译 on ubuntu 18.04,带有Xmonad 和 debian 9在云中运行,但是每次,net_adm> net_adm尽管其他内核模块是. 我认为这是由外部系统配置引起的,因为在网上找不到任何有关此内容的信息,因此人们不会抱怨它. (到目前为止,只有一个人.) ) 解决方案 有点ham愧地承认我是个白痴,但是net_adm一直在那里... 由于某种原因,它不会在erl shell上自动完成,但是一旦以net_adm:(例如不存在的net_adm:ping())开始输入,并执行它,它将开始识别模块,并在键入标签键时提供可用功能的列表.
18 2022-09-11
编程技术问答社区
埃尔朗(Erlang)公司的远程外壳不工作
我的Docker容器(CentOS)有一些奇怪的行为.当我进入它时,有一个erlang vm(api@127.0.0.1)的运行实例,我无法与-Remsh参数连接,但是我可以ping.我的erlang节点(api@127.0.0.1)虽然正常工作. bash-4.2# ./bin/erl -name 'remote@127.0.0.1' -remsh 'api@127.0.0.1' Eshell V6.1 (abort with ^G) (remote@127.0.0.1)1> node(). 'remote@127.0.0.1' (remote@127.0.0.1)2> net_adm:ping('api@127.0.0.1'). pong (remote@127.0.0.1)3> erlang:system_info(system_version). "Erlang/OTP 17 [erts-6.1] [source] [64-bit] [smp:8:8] [async-th
76 2022-09-11
编程技术问答社区
如何在Erlang中创建一个1000个随机数的列表?
我确定有一个功能.我只想列出1000个数字的列表,每个数字都应该是随机的. 解决方案 生成一个1000元素列表,随机数在1到10之间: [rand:uniform(10) || _ F = fun() -> io:format("~p~n", [[random:uniform(10) || _ spawn(F). [1,5,8,10,6,4,6,10,7,5] > spawn(F). [1,5,8,10,6,4,6,10,7,5
44 2022-09-11
编程技术问答社区
我可以禁止在Erlang shell中把小整数的列表打印成字符串吗?
erlang shell"猜测"为方便起见.可以禁用这种"便利性"? 解决方案 您可以通过 shell:strings/1函数开始erlang r16b. 请记住,这是所有节点外壳的全局选项,在完成播放后将其放回原处是在较长的活节点中进行的. 其他解决方案 我不知道是否可以更改外壳的默认行为,但是您至少可以使用 io:格式. 这是一个示例: 1> io:format("~p~n", [[65, 66, 67]]). "ABC" ok 2> io:format("~w~n", [[65, 66, 67]]). [65,66,67] ok ,由于外壳仅用于实验/维护,因此io:format()至少应该足够用于实际应用.也许您还应该考虑编写自己的格式/打印方法,例如formatPerson()或类似的东西,它格式化了所有内容. 其他解决方案 我倾向于通过将原子预先到我的列表中. 例如: Eshell V5.7.4 (abort wit
32 2022-09-11
编程技术问答社区
使用Yaws实现REST API
我正在尝试使用 Yaws Web 服务器构建一个 REST API,但我无法让 Yaws 将请求分派到我的模块. -module(rest). -include_lib("stdlib/include/qlc.hrl"). -include_lib("yaws/include/yaws_api.hrl"). -export([out/1, addAirport/4, handle/2]). -compile(export_all). -define(RECORD_TYPE, airport). -define(RECORD_KEY_FIELD, code). -record(airport, {code, city, country, name }). start() -> application:start(mnesia). do_this_once() -> mnesia:create_table(airport, [{attributes,
204 2022-08-10
编程技术问答社区