elixir - 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
它,它会在打印另一块板之前清除屏幕。
解决方案
就像您提到的清除屏幕的最佳方法是调用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
了一个特殊函数。
推荐阅读
- mysql - 保存双向不可为空的约束
- python - 读取 pandas 中的数据帧,跳过第一列以读取时间序列数据
- vb.net - 如何使用来自 2 个表的数据创建实体框架 DbSet
- javascript - Using JavaScript to submit an array and a file object to a Rails backend
- c - UART 不传输/打印多个字符
- c++ - C++ 使用声明和类型别名
- javascript - Cloudinary Axios 转换
- sql-server - DBMS 和数据库 IDE 有什么区别?
- java - 如何从终端运行 Java public static void main
- java - 内存中存储和处理大型数据列表 Spring Boot 2 java