xcode 6 swift system()命令

Lan*_*cky 5 macos swift

有没有对swift系统命令的良好描述?例如,这段代码

    let x = system("ls -l `which which`")
    println(x)
Run Code Online (Sandbox Code Playgroud)

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

0

我想将输出与返回代码分开

Mar*_*n R 9

system()不是Swift命令而是BSD库函数.您将在终端窗口中获得带有"man system"的文档:

system()函数将参数命令传递给命令解释器sh(1).调用进程等待shell完成命令执行,忽略SIGINT和SIGQUIT,并阻塞SIGCHLD.

"ls"命令的输出只写入标准输出而不是任何Swift变量.

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

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)
Run Code Online (Sandbox Code Playgroud)

由于"反向滴答"参数,这里需要通过shell"/ bin/sh -c command ..."执行命令.通常,最好直接调用命令,例如:

task.launchPath = "/bin/ls"
task.arguments = ["-l", "/tmp"]
Run Code Online (Sandbox Code Playgroud)