我需要从 OSX 应用程序运行以下命令:
单链表。-读取/用户/用户 JPEGPhoto | 尾-1 | xxd -r -p > /Users/user/Desktop/user.jpg
我尝试了几件事,例如:
func runScript(launchPath:String, scriptName:String) {
let task = NSTask()
task.launchPath = launchPath
task.arguments = NSArray(objects: scriptName)
let pipe = NSPipe()
task.standardOutput = pipe
task.launch()
let data = pipe.fileHandleForReading.readDataToEndOfFile()
let output: String = NSString(data: data, encoding: NSUTF8StringEncoding)
}
和
func runCommand(command: String) -> (output: String, exitStatus: Int) {
let tokens = command.componentsSeparatedByString(" ")
let launchPath = tokens[0]
let arguments = tokens[1..<tokens.count]
let task = NSTask()
task.launchPath = launchPath
task.arguments = Array(arguments)
let stdout = NSPipe()
task.standardOutput = stdout
task.launch()
task.waitUntilExit()
let outData = stdout.fileHandleForReading.readDataToEndOfFile()
let outStr = NSString(data: outData, encoding: NSUTF8StringEncoding)
return (outStr, Int(task.terminationStatus))
}
问题是这些方法每次调用执行一个命令,所以我必须调用它们三次(dscl/tail/xxd),这不起作用。
当我在终端中单独尝试它们时,它也不起作用。
有什么建议么?谢谢
更新:
在遵循 Ken Thomases 的好建议之后,这就是它在 swift 中的样子:
import Collaboration
func saveUserPicture() {
var userImage:NSImage = CBUserIdentity(posixUID: getuid(), authority: CBIdentityAuthority.defaultIdentityAuthority()).image() as NSImage
var userImageData:NSData = NSBitmapImageRep.representationOfImageRepsInArray(userImage.representations, usingType: NSBitmapImageFileType.NSJPEGFileType, properties: nil )
userImageData.writeToFile("/Users/user/Desktop/file.jpg", atomically: true)
}