微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

erlang – 在Elixir中执行基本shell命令

在学习语言的早期阶段,并通过Elixirsips系列视频进行工作.我继续打击那些被语言变化稍微亵渎的东西.试图围绕这个问题,Google / Github问题跟踪/拖网捕获是让我无处可借.我有这个非常基本的模块,它应该只运行一个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在标准lib中,并且阅读文档指示的选项是,很好,可选.所以我传递空的args note |>命令|> System.cmd([]),我得到的是erlang::enoent:再次阅读文档一点更仔细,公正.

所以我尝试使用Erlang的:os.cmd / 1,所以注意|>命令|> :os.cmd,我得到(FunctionClauseError)没有函数子句匹配:os.validate / 1.而我现在被困了

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返回false.

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

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

原文地址:https://www.jb51.cc/bash/386107.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐