早上好!
我正在尝试在erlang shell和外部函数(zenity)之间建立通信,该函数只能通过脚本进行通信。(它只能运行命令行)
在我的程序中,erlang shell已经运行并生成了我需要的节点。 (因此打开另一个shell来运行这些函数不起作用,escript
打开一个新shell。我需要从我的主shell运行函数)
这是我manualy所做的,并且想编写脚本。
$ erl -name two@127.0.0.1
Erlang/OTP 18 [erts-7.3] [source] [64-bit] [smp:4:4] [async-threads:10] [kernel-poll:false]
Eshell V7.3 (abort with ^G)
(two@127.0.0.1)1> c(client).
{ok,client}
(two@127.0.0.1)2> client:init().
true
(two@127.0.0.1)3>
client:init()
产生线程。我通过一些功能与他们沟通。
从这里我用
运行我的不同功能client:<function>(<Args>).
但是一个剧本
erl -name two@127.0.0.1
c(client).
client:init()
client:<function>(<Args>).
显然,它不起作用。
我可以用
缩短这一点$ erl -name two@127.0.0.1 -s client init
但我仍然无法在创建的shell上运行函数,因为要调用的函数取决于仅通过shell命令行进行通信的Zenity的输出
是否有通过脚本运行erlang命令的解决方案?
答案 0 :(得分:0)
为什么要从zenity
运行命令而不只是抓取结果? (或者你可以运行echo
。)
1> Port = open_port({spawn_executable, os:find_executable("zenity")}, [in, {line, 65536}, eof, {args, ["--calendar", "--title=Holiday Planner"]}]).
#Port<0.490>
2> flush().
Shell got {#Port<0.490>,{data,{eol,"10/20/2016"}}}
Shell got {#Port<0.490>,eof}
ok