是否有对swift系统命令的良好描述?例如,此代码
let x = system("ls -l `which which`")
println(x)
产生 -rwxr-xr-x 1根轮14496 8月30日04:29 / usr / bin /其中
0
我想将输出与返回代码
分开答案 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"]