Swift调用系统命令

1,215 阅读1分钟

Swift调用系统命令。

创建 Swift命令行工具时,发现 Swfit调用系统命令,简陋且繁琐,Creating a command line tool using the Swift Package Manager

Homepage

github.com/QiuZhiFei/s…, 使用系统命令字符串,并返回标准输出。

Usage


import Commands

Bash

Execute shell commands.


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"

let result = Commands.Task.run(request)

Or


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

let result = Commands.Task.run(request)

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.5.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.5.0'

QuickStart


git clone https://github.com/QiuZhiFei/swift-commands

cd swift-commands && open Package.swift

References