Popularity
0.9
Growing
Activity
0.0
Stable
1
1
0
Monthly Downloads: 3
Programming language: Haskell
License: BSD 3-clause "New" or "Revised" License
Tags:
System
shellout alternatives and similar packages
Based on the "System" category.
Alternatively, view shellout alternatives based on common mentions on social networks and blogs.
-
nix-deploy
DISCONTINUED. Deploy software or an entire NixOS system configuration to another NixOS system -
ghc-hotswap
DISCONTINUED. Example code for how we swap compiled code within a running Haskell process. -
plugins
Dynamic linking and runtime evaluation of Haskell, and C, including dependency chasing and package resolution. -
ascii-progress
A simple Haskell progress bar for the console. Heavily borrows from TJ Holowaychuk's Node.JS project -
cef
DISCONTINUED. A Haskell library for CEF (Commont Event Format) [GET https://api.github.com/repos/picussecurity/haskell-cef: 404 - Not Found // See: https://docs.github.com/rest/repos/repos#get-a-repository] -
language-puppet
A library to work with Puppet manifests, test them and eventually replace everything ruby.
InfluxDB – Built for High-Performance Time Series Workloads
InfluxDB 3 OSS is now GA. Transform, enrich, and act on time series data directly in the database. Automate critical tasks and eliminate the need to move data externally. Download now.
Promo
www.influxdata.com

Do you think we are missing an alternative of shellout or a related project?
Popular Comparisons
README
shellout
A simple library for running standard processes in a threaded manager , and responding to/doing things with stdout, stderr, and exits as they happen.
This was mainly built out of frustration that most libraries wait for a task to complete before giving output.
Just initialize with a driver and off you go!
Example
Here's a short annotated example on how to use this:
{-# LANGUAGE OverloadedStrings #-}
module Main where
import qualified Shellout
import Control.Concurrent (threadDelay)
import Data.Monoid ((<>))
import Data.Text (Text)
import qualified Data.Text.IO as T
-- create a type to hold data that will be passed between all of your handlers,
-- where you could store things like the task name, a spinner's position
-- and last spin time, etc.
newtype Task = Task {name :: Text}
main :: IO ()
main = do
-- create a 'driver', with functions that handle each type of output
let driver = Shellout.Driver
-- (optionally) do something with the task name, and initialize
-- data that will be passed between your handlers. you could store
-- things like the task name, a spinner's position and last spin time, etc.
{ Shellout.initialState =
\taskName -> Task {name = taskName}
-- what to do when polling returns `Nothing`, so it's waiting on
-- more output from the task, but the task still hasn't exited.
-- In this example, we just sleep.
, Shellout.handleNothing =
\task -> threadDelay 1000 >> pure task
-- what to do on stdout from the shell command. You could colorize it,
-- append it to list of output (you could keep a list of them in the `Task`), etc.
, Shellout.handleOut =
\task txt -> T.putStrLn (name task <> ": " <> txt) >> pure task
-- what to do on stderr. Same things go as stdout.
, Shellout.handleErr =
\task txt -> T.putStrLn (name task <> ": " <> txt) >> pure task
-- what to do when a task completes successfully
, Shellout.handleSuccess =
\task -> T.putStrLn $ (name task) <> " complete."
-- what to do when a task doesn't complete successfully
, Shellout.handleFailure =
\task -> T.putStrLn $ (name task) <> " failed."
}
shell <- Shellout.new driver
shell "listing directory" "ls"
shell "listing hidden files" "ls -lah"