Swiftpack.co -  QiuZhiFei/swift-commands as Swift Package
Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
Swift utilities for running commands.
.package(url: "https://github.com/QiuZhiFei/swift-commands.git", from: "0.6.0")

Swift Commands

SPM CocoaPods CI Status License Platform

Swift utilities for running commands.

The Commands module allows you to take a system command as a string and return the standard output.

API documentation can be found here.


import Commands


Execute shell commands.

let result = Commands.Task.run("bash -c ls")


let result = Commands.Task.run(["bash", "-c", "ls"])


let result = Commands.Bash.run("ls")


Execute python scripts.

let result = Commands.Task.run("python main.py")

Execute python commands.

let result = Commands.Task.run("python -c import base64; print(base64.b64encode('qiuzhifei').decode('ascii'))")


let result = Commands.Python.run("import base64; print(base64.b64encode('qiuzhifei').decode('ascii'))")


Execute ruby scripts.

let result = Commands.Task.run("ruby main.rb")

Execute ruby commands.

let result = Commands.Task.run("ruby -e require 'base64'; puts Base64.encode64('qiuzhifei')")


let result = Commands.Ruby.run("require 'base64'; puts Base64.encode64('qiuzhifei')")


Create a shortcut name for a command.

let node = Commands.Alias("/usr/local/bin/node", dashc: "-e")
let result = node.run("console.log('qiuzhifei')")

Setting global environment variables

Commands.ENV.global["http_proxy"] = ""
Commands.ENV.global.add(PATH: "/Users/zhifeiqiu/.rvm/bin")

Making Commands

let request: Commands.Request = "ruby -v"


let request: Commands.Request = ["ruby", "-v"]


let request = Commands.Request(executableURL: "ruby", arguments: "-v")

Change environment variables

var request: Commands.Request = "ruby -v"
request.environment?.add(PATH: "/usr/local/bin")
request.environment?["http_proxy"] = ""
request.environment?["https_proxy"] = ""
request.environment?["all_proxy"] = "socks5://"

let result = Commands.Task.run(request)

Result Handler

Returns the Commands.Result of running cmd in a subprocess.

let result = Commands.Task.run("ruby -v")
switch result {
case .Success(let request, let response):
  debugPrint("command: \(request.absoluteCommand), success output: \(response.output)")
case .Failure(let request, let response):
  debugPrint("command: \(request.absoluteCommand), failure output: \(response.errorOutput)")

Adding Commands as a Dependency

To use the Commands library in a SwiftPM project, add the following line to the dependencies in your Package.swift file:

let package = Package(
    // name, platforms, products, etc.
    dependencies: [
        .package(url: "https://github.com/qiuzhifei/swift-commands", from: "0.6.0"),
        // other dependencies
    targets: [
        .target(name: "<command-line-tool>", dependencies: [
            .product(name: "Commands", package: "swift-commands"),
        // other targets

CocoaPods (OS X 10.9+)

You can use CocoaPods to install Commands by adding it to your Podfile:

pod 'Commands',        '~> 0.6.0'


git clone https://github.com/QiuZhiFei/swift-commands
cd swift-commands && open Package.swift



Stars: 10
Last commit: 6 days ago

Ad: Job Offers

iOS Software Engineer @ Perry Street Software
Perry Street Software is Jack’d and SCRUFF. We are two of the world’s largest gay, bi, trans and queer social dating apps on iOS and Android. Our brands reach more than 20 million members worldwide so members can connect, meet and express themselves on a platform that prioritizes privacy and security. We invest heavily into SwiftUI and using Swift Packages to modularize the codebase.

Submit a free job ad (while I'm testing this). The analytics numbers for this website are here.

Release Notes

6 days ago

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics