【问题标题】:Open (interactive) Terminal with Swift使用 Swift 打开(交互式)终端
【发布时间】:2015-07-09 10:29:17
【问题描述】:

我正在尝试使用 Swift 打开一个终端并从那里运行一个 python 脚本。我发现这个函数可以这样做:

(Get terminal output after a command swift)

    func runCommand(cmd : String, args : String...) -> (output: [String], error: [String], exitCode: Int32) {

    var output : [String] = []
    var error : [String] = []

    let task = NSTask()
    task.launchPath = cmd
    task.arguments = args

    let outpipe = NSPipe()
    task.standardOutput = outpipe
    let errpipe = NSPipe()
    task.standardError = errpipe

    task.launch()

    let outdata = outpipe.fileHandleForReading.readDataToEndOfFile()
    if var string = String.fromCString(UnsafePointer(outdata.bytes)) {
        string = string.stringByTrimmingCharactersInSet(NSCharacterSet.newlineCharacterSet())
        output = string.componentsSeparatedByString("\n")
    }

    let errdata = errpipe.fileHandleForReading.readDataToEndOfFile()
    if var string = String.fromCString(UnsafePointer(errdata.bytes)) {
        string = string.stringByTrimmingCharactersInSet(NSCharacterSet.newlineCharacterSet())
        error = string.componentsSeparatedByString("\n")
    }

    task.waitUntilExit()
    let status = task.terminationStatus

    return (output, error, status)
}

我正在调用问题中写的函数:

let output =  runCommand("/usr/bin" , args: "python " + folderPath + selecteditem)

args 的打印是:“python /Users/michael/Documents/Python/testestest.py”

如果我将它粘贴到终端,这是一个有效的命令。

但 xCode 告诉我:无法 posix_spawn:错误 13


你会建议我做什么?我不确定是否没有更简单的方法来启动运行命令的可见控制台。我正在考虑的另一个问题是,在 xcode 中实时输出会很棒(意味着在 python 脚本仍在运行时查看输出)这是否可能?

谢谢

【问题讨论】:

    标签: swift terminal xcode6


    【解决方案1】:

    python /Users/michael/Documents/Python/testestest.py 在终端中工作,因为它被输入到 /bin/bash 或其他 shell 解释器中。使用 NSTask 运行 shell 命令时,您有 2 个选项:

    1. 像在终端中一样使用 bash。

      runCommand("/bin/bash" , args: "-c", "python " + folderPath + selecteditem)

    2. 直接调用可执行文件。

      runCommand("/usr/bin/python" , args: folderPath + selecteditem)

    如果您使用第二个选项,您必须知道可执行文件的确切位置,但从好的方面来说,您可以将每个参数作为单独的参数输入到 runCommand 函数中,您不必担心在周围加上转义引号他们就像你对 bash 所做的那样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-18
      • 1970-01-01
      • 2011-10-14
      相关资源
      最近更新 更多