热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在Elixir中执行基本的shell命令

如何解决《在Elixir中执行基本的shell命令》经验,为你挑选了1个好方法。

在学习语言的早期阶段,并通过ElixirSips系列视频进行工作.我一直在打一些被语言变化略微痴迷的东西.试图围绕这一点,谷歌/ Github问题追踪器/ SO拖网让我无处可用.我有这个非常基本的模块,它应该运行一个shell命令:

defmodule QuickieSynth.Sound do
  def command(note) do
    "play -qn synth 2 pluck #{note}"
  end

  def play(note) do
    note |> command |> System.cmd
  end
end

但是,当编译此文件并运行测试时,我得到一个参数错误; 足够公平 - System.cmd/1似乎不再是标准库的一部分.

System.cmd/3 在标准库,并读取文档所指示的选项,以及,可选的.所以我通过空的args note |> command |> System.cmd([]),我得到的是erlang: :enoent:再次仔细阅读文档后,再次公平.

所以我尝试使用Erlang :os.cmd/1,所以note |> command |> :os.cmd,我得到了(FunctionClauseError) no function clause matching in :os.validate/1.我现在卡住了.



1> Paweł Obrok..:

System.cmd/3似乎接受命令的参数作为列表,并且当您尝试在命令名称中隐藏参数时不高兴.例如System.cmd("ls", ["-al"])工作,System.cmd("ls -al", [])而不工作.所以在你的情况下,你可能需要这样的东西:

System.cmd("play", ["-qn", "synth", "2", "pluck", note])

其实什么情况下是System.cmd/3调用:os.find_executable/1其第一个参数,它工作得很好,这样的事情ls,但返回假ls -al的例子.

erlang调用需要一个char列表而不是二进制文件,因此您需要以下内容:

"ls -al" |> String.to_char_list |> :os.cmd


推荐阅读
author-avatar
mobiledu2502905597
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有