I was recently trying to create a basic piece of Clojure code to play with “real-time” log file parsing by playing with futures. The longer term goal of the experiment is to be able to tail -f
a log file pipe that into my Clojure log parser as input.
As I wasn’t sure exactly what I would need to be doing, I wanted an easy way to run some code quickly without having to rebuild the jars through Leiningen every time I wanted to try something, in a manner similar to the way I am thinking I will be using it if the experiment succeeds.
I created a file test_input
with the following lines:
1 hello 2 test 3 abacus 4 qwerty 5 what 6 dvorak
With this in place, my goal was to be able to run something like cat test_file | parser_concept
. After a bit of searching I found the lein-exec plugin for Leiningen, and after very minor setup I was able to start iterating with input piped in from elsewhere.
The first step was to open my profiles.clj
file in my ~/.lein
directory. I made sure lein-exec was specified in my user plugins as so:
{:user {:plugins [[lein-exec "0.2.1"] ;other plugins for lein ]}}
With this in place I just put the following line at the top of my script.clj
file:
#!/usr/bin/env lein exec
I then changed the permissions of script.clj
file to make it executable, I was able to run the following and have my code run against the input.
cat test_input | ./script.clj
I will be posting a follow up entry outlining my next step of experimenting with “processing” each line read in as a future.