smon

smon

I tried something like this in my mix.exs:

def application do
  [
    applications: [:logger, :httpoison, :poison],
    mod: {Test, []}
  ]
end

In my Test.ex:

defmodule Test do
  use Application

  def start(_mode, _args) do
    System.argv
    |> Test.CLI.main
  end
end

But how do I pass arguments to the start function without “confusing” the mix run script? If I try to mix run --type marc, I get

** (Mix) Could not invoke task "run": 1 error found! --type : Unknown option

Ok, I kind of get that. But then I noticed that if I add some random argument in between like mix run what --type marc, it kind of works: The what gets lost on the way, meaning it is missing from System.argv, which leaves ["--type", "marc"].

You may have noticed: I am somewhat confused. :wink:

What is the correct way to do this besides turning to escript?

Showing Posts 1 to 5

benwilson512

benwilson512

Author of Craft GraphQL APIs in Elixir with Absinthe

It sounds like you want a mix task or an escript.

sger

sger

Hello,

You need escript for this job for example in your mix.exs you must pass

escript: [main_module: MyApp]

then in your module define something like this:

defmodule MyApp do
 def main(args) do
  args |> parse_args |> process
 end

def process([]) do
 IO.puts "No arguments given"
end

def process(options) do
 IO.puts "Hello #{options[:name]}"
end

 defp parse_args(args) do
  {options, _, _} = OptionParser.parse(args, switches: [name: :string])
  options
 end
end

finally from the command line:

mix escript.build
$ ./my_app --name=Elixir
smon

smon OP

Thanks! mix tasks seem to be the closest thing to what I initially intended.

smon

smon OP

My idea was to avoid the mix escript.build step. Looking at mix tasks, it seems like I would have to start all dependencies manually - so maybe an escript is still the more elegant solution. Thank you for your example!

Oliver

Oliver

Hello.

I was looking for a thread similar to my original post which I can no longer reply to (Google group got closed): Redirecting to Google Groups

My original solution was indeed based on escript, but in order to enable “-mode embedded” for code preloading I had to switch away from it and over to building my software with distillery.

distillery builds you scripts to start your application like this: bin/myapp foreground

There is no escript involved.

And I found a solution for commandline arguments: init — OTP 29.0.2 (erts 17.0.2)

I filtered, joined, and processed the results and I had all the commandline arguments I needed. Finally solved my problem with commandline arguments.

My final commandline looks like this: bin/myapp foreground --config "something". (You have other options to start the application, of course, like detached or with an attached console.) I then put the parsed results in my applications environment with Application.put_env(:myapp, <key, <value>) and retrieve them later when needed easily.

— All posts loaded —

Where Next? Top

Trending in Questions Top

RSP87
I’m working on a project that simulates the bumbl example in the programming phoenix book. It acts almost like an email client. We have a...
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
nseaSeb
Hello, I know there is an approach for handling lists that allows for optimized traversal, but I can’t recall the specific method (somet...
New
brecabral
Documentation While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
velrest
So my question is quite simple and i have found no conclusive answer on forum, google or AI. Should we use :erlang.float for Integer to ...
New
asweet-confluent
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New
apz
I’m new to elixir and just tried to install the elixirLS extension for VScode(ium) and it is throwing some errors that I would like help ...
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
JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
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
marciok
Hi there! We created Gust: A task orchestrator inspired by Airflow. For those who have never heard about Aiflow, it’s a Python-based wor...
New
mhanberg
Hi everyone! The first release candidate for the Expert language server project is now available! We’ve published a press release detai...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews