使用Swift

时间:2015-07-09 10:29:17

标签: swift terminal xcode6

我正在尝试使用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脚本仍在运行时查看输出)这是否可能?

感谢

1 个答案:

答案 0 :(得分:0)

fbauth2在终端中工作,因为它被输入/ bin / bash或另一个shell解释器。使用NSTask运行shell命令时,您有两个选项:

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

    python /Users/michael/Documents/Python/testestest.py

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

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

  3. 如果您使用第二个选项,您必须确切知道可执行文件的位置,但在正面,您可以将每个参数作为runCommand函数的单独参数输入,并且您不必担心将转义引号置于其中他们喜欢你用bash做的事。