Hi,
I am pleased to announce a small package which will help in running codes with command line args from REPL. Recently, I have been working with Plots, Flux etc, where the package load time is quite high. While loading in REPL and running with include()
is the first solution to avoid wait times during loading, I also wanted the scripts to be able to take in command line arguments. Hence born Runner.jl
. Please find the details below:
Installation: ]add Runner
I welcome feedback from the community.
Runner.jl
TL;DR Provides @runit
macro for running scripts with commandline arguments from REPL.
Instead of
$julia script.jl arg1 arg2 arg3
use, from REPL
julia> @runit "script.jl arg1 arg2 arg3"
Advantage: Avoid the delay in package load times during development. Load it once using REPL and continue using it with commandline arguments.
Why?
This packages tries to solve the problem of running scripts with commandline arguments from REPL. Often we write scripts that can be called from commandline with arguments like
$julia script.jl arg1 arg2 arg3
However, during development, this may become cumbersome. If we use some packages which has long load times, running the script as above will create long delays before actually executing the code. A faster approach during development is to start a REPL and use
julia> include('script.jl')
But, in this case, we will not be able to provide command line arguments. Work around is to define a function which takes in arguments and manually calling it. Not neat!
This package exists to overcome this difficulty. It provide a macro @runit
which will let you run script from REPL with commandline arguments.
How?
Simple use case
If you have a script like
# hello.jl
# Simple script for demo. Accesses ARGS
println("Hello $(ARGS[1])!")
From commadline, we can run this as
$julia hello.jl Julia
To run this from REPL, use
julia> @runit hello.jl Julia
Use with ArgParse
# Script hello2.jl
using ArgParse
parser = ArgParseSettings()
@add_arg_table! parser begin
"name"
help = "Name to greet"
arg_type = String
"--greet"
help = "Greeting sting"
arg_type = String
default = "Hello"
end
parsed_args = parse_args(parser)
println(parsed_args["greet"], " ", parsed_args["name"], "!")
From commandline
$julia hello2.jl Julia
Hello Julia!
$julia hello2.jl Julia --greet Namaste
Namaste Julia!
From REPL
julia> @runit "hello2.jl Julia"
Hello Julia!
julia> @runit "hello2.jl Julia --greet Namaste"
Namaste Julia!