Swift Commands
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.
Usage
import Commands
 
Bash
Execute shell commands.
let result = Commands.Task.run("bash -c ls") 
Or
let result = Commands.Task.run(["bash", "-c", "ls"]) 
Or
let result = Commands.Bash.run("ls") 
Python
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'))") 
Or
let result = Commands.Python.run("import base64; print(base64.b64encode('qiuzhifei').decode('ascii'))") 
Ruby
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')") 
Or
let result = Commands.Ruby.run("require 'base64'; puts Base64.encode64('qiuzhifei')") 
Alias
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"] = "http://127.0.0.1:7890" 
Commands.ENV.global.add(PATH: "/Users/zhifeiqiu/.rvm/bin") 
Making Commands
let request: Commands.Request = "ruby -v" 
Or
let request: Commands.Request = ["ruby", "-v"] 
Or
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"] = "http://127.0.0.1:7890"
request.environment?["https_proxy"] = "http://127.0.0.1:7890"
request.environment?["all_proxy"] = "socks5://127.0.0.1:7890"
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' 
QuickStart
git clone https://github.com/QiuZhiFei/swift-commands
cd swift-commands && open Package.swift 

