Execute shell command and get output. Simple and robust.
Table of Contents
Add Work to Package.swift.
dependencies:[.package(url:"https://github.com/flintbox/Work", from:"0.1.0")]Work is subclass of Operation wrapping Process object.
import Foundation
import Work
// Create shell commands.
letecho1=Work(
command:"echo 1-1; sleep 1; echo 1-2; sleep 1; echo 1-3",
standardOutputHandler:{ output inprint("echo1 says: \(output)")})letecho2=Work(command:"echo 2-1; sleep 1; echo 2-2; sleep 1; echo 2-3")
// Start them synchronously.
echo1.start()
echo2.start()
// Print standard output of echo2.
print(echo2.standardOutput)echo1 says: 1-1
echo1 says: 1-2
echo1 says: 1-3
2-1
2-2
2-3import Foundation
import Work
// Create shell commands.
letecho1=Work(command:"echo 1-1; sleep 1; echo 1-2; sleep 1; echo 1-3")
echo1.standardOutputHandler ={ output inprint("echo1 says: \(output)")}
echo1.completion ={ result inswitch result {case.success(_):print("echo1 success")case.failure(_, _):print("echo1 failure")}}letecho2=Work(
command:"echo 2-1; sleep 1; echo 2-2; sleep 3; echo 2-3",
standardOutputHandler:{ output inprint("echo2 says: \(output)")}, completion:{ result inswitch result {case.success(_):print("echo2 success")case.failure(_, _):print("echo2 failure")}})
// Start them asynchronously.
OperationQueue().addOperations([echo1, echo2], waitUntilFinished:true)echo2 says: 2-1
echo1 says: 1-1
echo2 says: 2-2
echo1 says: 1-2
echo1 says: 1-3
echo1 success
echo2 says: 2-3
echo2 successIf you have good idea or suggestion? Please, don't hesitate to open a pull request or send me an email.
Hope you enjoy building command line tool with Work!