xcode 6 swift system()命令

时间:2014-10-16 08:09:32

标签: macos swift

是否有对swift系统命令的良好描述?例如,此代码

    let x = system("ls -l `which which`")
    println(x)

产生 -rwxr-xr-x 1根轮14496 8月30日04:29 / usr / bin /其中

0

我想将输出与返回代码

分开

1 个答案:

答案 0 :(得分:8)

system()不是Swift命令,而是BSD库函数。你得到了文件 在终端窗口中使用"man system"

  

system()函数将参数命令交给命令   口译员sh(1)。调用过程        等待shell完成执行命令,忽略SIGINT和SIGQUIT,并阻止SIGCHLD。

“ls”命令的输出只写入标准输出而不是任何输出 Swift变量。

如果您需要更多控制权,那么您必须使用Foundation框架中的NSTask。 这是一个简单的例子:

let task = NSTask()
task.launchPath = "/bin/sh"
task.arguments = ["-c", "ls -l `which which`"]

let pipe = NSPipe()
task.standardOutput = pipe
task.launch()

let data = pipe.fileHandleForReading.readDataToEndOfFile()
if let output = NSString(data: data, encoding: NSUTF8StringEncoding) {
    println(output)
}

task.waitUntilExit()
let status = task.terminationStatus
println(status)

这里需要通过shell“/ bin / sh -c command ...”执行命令,因为 “后退”的论点。通常,最好直接调用命令, 例如:

task.launchPath = "/bin/ls"
task.arguments = ["-l", "/tmp"]