Skip to content

Execute shell command and get output. Simple and robust.

License

Notifications You must be signed in to change notification settings

flintprocessor/Work

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Work
GitHub release Swift Package Manager license

Execute shell command and get output. Simple and robust.

Table of Contents

Installation

Add Work to Package.swift.

dependencies: [
    .package(url: "https://github.com/flintbox/Work", from: "0.1.0")
]

Work

Work is subclass of Operation wrapping Process object.

Example

Synchronous

import Foundation
import Work

// Create shell commands.
let echo1 = Work(
    command: "echo 1-1; sleep 1; echo 1-2; sleep 1; echo 1-3",
    standardOutputHandler: { output in
        print("echo1 says: \(output)")
    }
)
let echo2 = 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)

Output

echo1 says: 1-1
echo1 says: 1-2
echo1 says: 1-3
2-1
2-2
2-3

Asynchronous

import Foundation
import Work

// Create shell commands.
let echo1 = Work(command: "echo 1-1; sleep 1; echo 1-2; sleep 1; echo 1-3")
echo1.standardOutputHandler = { output in
    print("echo1 says: \(output)")
}
echo1.completion = { result in
    switch result {
    case .success(_):
        print("echo1 success")
    case .failure(_, _):
        print("echo1 failure")
    }
}

let echo2 = Work(
    command: "echo 2-1; sleep 1; echo 2-2; sleep 3; echo 2-3",
    standardOutputHandler: { output in
        print("echo2 says: \(output)")
    }, completion: { result in
        switch result {
        case .success(_):
            print("echo2 success")
        case .failure(_, _):
            print("echo2 failure")
        }
    }
)

// Start them asynchronously.
OperationQueue().addOperations([echo1, echo2], waitUntilFinished: true)

Output

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 success

Contribute

If 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!