【发布时间】:2014-06-16 13:21:59
【问题描述】:
我有一个 Erlang 程序,返回值是一个很长的可打印列表。但是当列表的长度大于 65534 时,我在终端上看到的是裸整数列表而不是 ASCII 字符。
这是我的 Erlang 代码:
-module(test).
-compile([export_all]).
print_long(Num) ->
[(X rem 95) + 32 || X <- lists:seq(1,Num)].
我从终端调用 Erlang 模块的方式:
erl_call -a 'test print_long [65534]' -n 'nodeName@hostname' -c SOMECOOKIE
Linux中的返回值有什么限制吗?
我想我可以对输出进行切片,但如何在终端上打印它们? 我试过 erlang:dispaly/0 但它不起作用。
【问题讨论】:
-
我这里没有命令
erl_call(R17,ERTS 6.0)。我错过了什么吗?编辑:当我在 Erlang shell 中运行您的代码时,我看到了正确的字符。 -
此命令位于
/lib/erlang/lib/erl_interface-X.X.X/bin/erl_call。我不知道是否还有其他方法可以从命令行(不是 Erlang Shell)调用 Erlang 程序。只要你能从 Erlang 程序中得到返回值,我认为这个问题会被重现。 -
我用
erl_call再次尝试,但仍然无法重现错误。附带说明一下,您也可以在没有 erlang shell 的情况下运行命令。例如,查看参数-eval、-run和-s。 -
嗨,evnu。不幸的是,我找不到这个问题的根本原因。但在我们的项目中,解决方案是将长列表写入一个带有 file:open/2 的临时文件。然后通过调用 shell 脚本 cat 文件。
-
@evnu。在 shell 脚本中:result=
cat $filename; ehco $结果。这种解决方法对我们来说运行良好。是的,我同意你的观点,可以在不打开 erlang shell 的情况下调用 erlang 模块。但由于我们需要从 shell 脚本调用,link 推荐使用 erl_call。 导致标准输入被读取的选项可以作为 (Unix) shell 脚本中的脚本使用。