如何在Elixir的.exs文件中调用另一个.exs文件(优先用Mix模块)
不用System.cmd,用Mix模块实现脚本调用的方案
嘿,要实现你想要的需求——不用System.cmd,靠Mix模块让second.exs调用执行first.exs,其实直接用Mix内置的任务函数就能搞定,这正是mix run命令底层运行的逻辑。
具体代码调整
- first.exs完全不用改,保持原样:
IO.puts "first"
- second.exs修改成这样:
IO.puts "second" # 调用Mix的run任务执行first.exs脚本 Mix.Tasks.Run.run(["first.exs"])
运行效果
当你在项目根目录执行mix run second.exs时,输出会是:
second first
(如果想要和你预期的输出顺序一致,只需要把Mix.Tasks.Run.run这行放到IO.puts "second"之前就行~)
为什么这个方法靠谱?
Mix.Tasks.Run.run/1是Mix官方提供的内置任务函数,它接收脚本路径列表作为参数,会直接在当前Elixir虚拟机进程里加载并执行指定的.exs脚本,不需要启动新的外部进程,比System.cmd更高效,也完全符合你优先用Mix模块的要求。
小提示
- 一定要在有
mix.exs的项目根目录下运行命令,因为Mix任务依赖项目环境的初始化; - 如果你的脚本不在根目录,传入相对路径或者绝对路径就行,比如
Mix.Tasks.Run.run(["lib/utils/first.exs"])。
内容的提问来源于stack exchange,提问作者Sam Houston
相关产品推荐
相关产品推荐

