V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
qiuzhifei
V2EX  ›  iDev

Swift 调用系统命令

  •  
  •   qiuzhifei · 2021-09-01 13:52:24 +08:00 · 1065 次点击
    这是一个创建于 1180 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Swift 调用系统命令, https://github.com/QiuZhiFei/swift-commands

    Commands模块,使用系统命令字符串,并返回标准输出。

    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.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

    2 条回复    2021-09-02 09:17:49 +08:00
    jdjingdian
        1
    jdjingdian  
       2021-09-01 19:36:54 +08:00
    请教一下,如果是需要 sudo 的命令呢?是否可以静默执行?
    qiuzhifei
        2
    qiuzhifei  
    OP
       2021-09-02 09:17:49 +08:00 via iPhone
    @jdjingdian 不可以 和 terminal 使用 sudo 是一致的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   967 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 19:27 · PVG 03:27 · LAX 11:27 · JFK 14:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.