【问题标题】:Erlang ssh_sftp returns eoptions password, what does this error mean?Erlang ssh_sftp 返回 eoptions 密码,这个错误是什么意思?
【发布时间】:2017-07-21 12:02:02
【问题描述】:

我的代码现在很简单,我是从 elixir 中调用 erlang。

iex> :ssh.start()
iex> :ssh_sftp.start_channel("192.168.1.183", 22, [{:user, "username"}, {:password, "password"}])

:ssh.start() 返回:ok,但:ssh_sftp.start_channel 返回{:error, {:eoptions, {:password, "password"}}}。如果我删除密码元组,它就会抱怨用户元组。这让我觉得我从根本上误解了 erlang 文档。我需要一些帮助来理解我做错了什么。 ssh_sftp 文档位于ssh_sftp

【问题讨论】:

    标签: ssh erlang elixir sftp


    【解决方案1】:

    {:eoptions, _} 返回when an option passed contains a value of invalid type。您收到此错误是因为 :password 必须是一个列表(Erlang String 或 Elixir charlist)。 :user 并且主机名也必须是字符列表。以下应该有效:

    :ssh_sftp.start_channel('192.168.1.183', 22, [{:user, 'username'}, {:password, 'password'}])
    

    这让我觉得我从根本上误解了 erlang 文档。

    Erlang 中的双引号字符串是字符列表,而不是二进制文件。如果您在 Erlang 代码中看到双引号字符串,则需要在 Elixir 中使用单引号字符串。

    【讨论】:

    • 那么,在他们拥有{password, string()} 的文档中,这是否意味着password 是一个原子而string() 是Elixir 中的单引号字符串?
    • 是的,Erlang 中的 password == Elixir 中的 :password,Elixir 中的 "foo" == Elixir 中的 'foo'。如果您打算使用 Elixir 的 Erlang 库,您应该查看本指南:elixir-lang.org/crash-course.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    • 2021-01-06
    相关资源
    最近更新 更多