Skip to content
Execute shell command and get output. Simple and robust.
Swift
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
Assets
Sources
.gitignore
LICENSE
Package.swift
README.md

README.md

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

main.swift

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

main.swift

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!

You can’t perform that action at this time.