Elixir 长生不老药;清晰的;macOS上的命令使用系统

Elixir 长生不老药;清晰的;macOS上的命令使用系统,elixir,Elixir,我有一个长生不老药生命游戏的实现,它将一个“棋盘”打印到STDOUT,我想在打印下一个版本的棋盘之前清除屏幕。我检查了,我想这就像调用System.cmd(“clear”,[])一样简单,但这似乎不起作用: iex(1)> System.cmd("clear", []) {"\e[H\e[2J", 0} 看起来好像返回了一些转义字符,但我不确定这是什么意思我的问题是为什么System.cmd(“clear”,[])不能工作?或者我认为它应该清除屏幕是错误的(为什么)? 显然,iex有一个

我有一个长生不老药生命游戏的实现,它将一个“棋盘”打印到STDOUT,我想在打印下一个版本的棋盘之前清除屏幕。我检查了,我想这就像调用
System.cmd(“clear”,[])
一样简单,但这似乎不起作用:

iex(1)> System.cmd("clear", [])
{"\e[H\e[2J", 0}
看起来好像返回了一些转义字符,但我不确定这是什么意思我的问题是为什么
System.cmd(“clear”,[])
不能工作?或者我认为它应该清除屏幕是错误的(为什么)?


显然,iex有一个方便的功能
clear
来清除在iex中工作的屏幕。我发现这个helper方法来自
IEx.Helpers
模块,现在我可以运行
IEx.Helpers.clear
,它会在打印另一块电路板之前清除屏幕。

如您所述,清除屏幕的最佳方法是调用:

IEx.Helpers.clear

要回答您的另一个问题,这是因为
System.cmd
命令实际上没有向控制台打印任何内容,而是返回它(因此Elixir应用程序可以使用它)。返回的字符串(
\e[H\e[2J
)由两个ANSI转义码组成,分别对应于“回家”(
\e[H
)和“清除”(
\e[2J

您可以自己测试。调用此命令将清除屏幕(并返回
:ok
):

IO.put(“\e[H\e[2J”)


有趣的旁注:IEx clear helper之所以不返回
:ok
,是因为它在最后调用了一个函数。

将输出重定向回控制台也可以解决问题:
System.cmd(“clear”,[],进入:IO.stream(:stdio,:line))