Tormenator1

Tormenator1

I’m still learning Elixir,and am making a basic elixir program to call a function from a python program. I am attempting to use erlport to do so. However, in the code below Erlport is undefined. I don’t see what could be causing it.

defmodule RarFile do
  @moduledoc """
  Documentation for `RarFile`.
  """

  @doc """
  Hello world.

  ## Examples

      iex> RarFile.hello()
      :world

  """
  

  def extractor(filepath) do
    {:ok, pid} = :erlport.open_port({:spawn, "python"}, [:binary, :stream, packet: 4])


  end

end

Here is the mix.exs file that I’m using.

defmodule RarFile.MixProject do
  use Mix.Project

  def project do
    [
      app: :rar_file,
      version: "0.1.0",
      elixir: "~> 1.14",
      start_permanent: Mix.env() == :prod,
      deps: deps()
    ]
  end

  # Run "mix help compile.app" to learn about applications.
  def application do
    [
      extra_applications: [:logger]
    ]
  end

  # Run "mix help deps" to learn about dependencies.
  defp deps do
    [

      {:erlport, "~> 0.10"}
      # {:dep_from_hexpm, "~> 0.3.0"},
      # {:dep_from_git, git: "https://github.com/elixir-lang/my_dep.git", tag: "0.1.0"}
    ]
  end
end

Showing Posts 15 to 6

nallwhy

nallwhy

Hi, I’ve just released Doumi.Port - A helper library that facilitates the usage of Python in Elixir.

This library will make it much easier to use Python in Elixir.
Thanks!

kokolegorille

kokolegorille

No need to use charlist here, You can use binaries…

But it is only half of the problem, because the Python part is tricky to setup. You’ll need to do some conversion of data in the Python script. Something like this…

    if isinstance(path, bytes):
        path = path.decode("utf-8")
        if not os.path.exists(path):
            return ("error", "path does not exists.")
    else:
        return ("error", "cannot decode path.")
dimitarvp

dimitarvp

Move the variables inside the function.

Or if you want them to be accessible for the entire module, make them module attributes.

Tormenator1

Tormenator1 OP

Thank you. Wrote a line in that format calling another function called rar_extraction. Here’s the total code I have so far

defmodule RarFile do

  archive_path = 'extractor/Kickassv301.cbr'
  destination_folder = 'extractor/extracted'


  def extractor(filepath) do
    {:ok, pi1} = :python.start()
    :python.call(pid1, :handler, :rar_extraction, [archive_path, destination_folder])

  end

end

However,I get a error from the ninth line that says

(CompileError) undefined function archive_path/0 (expected RarFile to define such a function or for it to be
imported, but none are available)

What could be causing this?

kokolegorille

kokolegorille

It should look like this…

Tormenator1

Tormenator1 OP

So the python file is called handler.py and the function I am calling is called hey. It accepts 1 string parameter.

How would I call that function in this code. I’m unclear about what is meant to be passed into the call function in terms of the module parameter?

{:ok, pi1} = :python.start()
:python.call(pi1,,hey,"hi") #left module blank,unsure what is passed there
kokolegorille

kokolegorille

No, I did not provide code written in Erlang :slight_smile:

kokolegorille

kokolegorille

Erlport is an Erlang package, so the doc is written in Erlang…

I advise You to read this page, if You want to translate from Erlang to Elixir

Tormenator1

Tormenator1 OP

I am using this exact line when i get the error above.

:python.start([{:python_path, to_charlist(path)}, {:python, 'python3'}])

Elixir thinks that this is a syntax error.

I get a similar error when I try this line from the language docs

{ok, P} = python:start()

(SyntaxError) keyword argument must be followed by space after: python:
|
18 | {ok, P} = python:start()
| ^

Stacktrace:
│ (elixir 1.14.4) lib/kernel/parallel_compiler.ex:340: anonymous fn/5 in Kernel.ParallelCompiler.spawn_workers/7

Why exactly would this be happening?

kokolegorille

kokolegorille

That is not Elixir code, but Erlang, it should be…

{:ok, pi1} = :python.start()

… in Elixir. And beware with the strings, they are not really the same between Elixir and Erlang

Where Next? Top

Trending in Questions Top

katta
I having some trouble figuring out if I have set myself too strict of standards for my production server. Currently I can handle 75% of r...
New
achenet
Hello, I’m trying to build a basic Phoenix web-app, and I’d like to use Tailwind. However, when I launch mix phx.server, I get an error...
New
kpanic
Hi everyone, I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding. I sta...
New
Cxx-mlr
I’m working on a small exercise involving update_in/3, and I came up with this solution: data = %{ name: "Periodic Table", category:...
New
ChrisAmelia
I’ve got trouble wrapping my head around the order in which functions are called in this snippet (from Phoenix’s authentication): toke...
New
dillonoconnor
Is there any way to avoid the Hologram compiler running when using iex? It seems like the front-end code could potentially be disregarded...
New
thiagogsr
** (ArgumentError) expected :max_attempts to be a positive integer, got: {:@, [line: 10, column: 19], [{:max_attempts, [line: 10, column:...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
budgie
A little off-topic, but I feel like people here have a good head on their shoulders. I used to be quite good at making software. Was luc...
New
KristerV
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
mcass19
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews