Elixir在macOS上使用System运行“ clear”命令

时间:2018-10-29 01:43:04

标签: elixir

我有一个长生不老药游戏,可以在STDOUT上打印一个“木板”,我想在打印下一个木板之前清除屏幕。我检查了elixir documentation,并认为这和调用System.cmd("clear", [])一样容易,但这似乎并不能解决问题:

iex(1)> System.cmd("clear", [])
{"\e[H\e[2J", 0}

似乎返回了一些转义字符,但是我不确定这是什么意思。 我的问题是System.cmd("clear", [])为什么不起作用?还是我期望它应该清除屏幕错误(以及为什么)?

显然,iex具有便捷功能clear,可以清除在iex中可用的屏幕。我发现此辅助方法来自IEx.Helpers模块,我现在可以运行IEx.Helpers.clear并在打印另一块板之前清除屏幕。

1 个答案:

答案 0 :(得分:4)

就像您提到的清除屏幕的最佳方法是调用clear helper

IEx.Helpers.clear

要回答另一个问题,这是因为System.cmd命令实际上并没有在控制台上打印任何内容,而是将其返回(因此Elixir应用程序可以对其执行某些操作)。返回的字符串(\e[H\e[2J由两个与“回家” \e[H)和“ clear” \e[2J

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

IO.puts("\e[H\e[2J")

有趣的旁注: IEx清除助手不返回:ok的原因是因为它在末尾调用了special function。 / sup>