首页 > 解决方案 > Elixir 在 macOS 上使用系统运行“清除”命令

问题描述

我有一个长生不老药游戏实现打印一个“板”到 STDOUT,我想在打印下一个版本的板之前清除屏幕。我检查了elixir 文档,我认为它就像调用一样简单,System.cmd("clear", [])但这似乎并没有解决问题:

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

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

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

标签: elixir

解决方案


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

IEx.Helpers.clear

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

你可以自己测试一下。调用它会清除屏幕(并返回:ok):

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

有趣的旁注: IEx 清除助手不返回的原因是因为它最后调用:ok了一个特殊函数。


推荐阅读