【发布时间】:2016-02-10 15:01:50
【问题描述】:
尝试从系统分析器中读取一些信息。为此,我正在使用 NSTask 运行一些终端行命令。如果我运行一些输出不太大的命令没有问题。(例如:SPInstallHistoryDataType)但是如果我运行“SPApplicationsDataType”命令来收集已安装的应用程序列表,NSTask 等待太多而没有任何结果和任何错误。
所以我开始认为应该有一个缓冲区大小或类似的东西,但我找不到任何关于它的东西。我不知道我可能走错路了。
func readData (dataType: String) -> NSArray? {
let out = NSPipe()
let task = NSTask()
task.launchPath = "/usr/sbin/system_profiler"
task.arguments = ["-xml",dataType]
task.standardOutput = out
task.launch()
task.waitUntilExit()
if task.terminationStatus != 0 {
NSLog("system_profiler returned error status")
return nil
}
let data = out.fileHandleForReading.readDataToEndOfFile()
let plist : AnyObject?
do {
plist = try NSPropertyListSerialization.propertyListWithData(data,
options: [.Immutable],
format: nil)
} catch let error as NSError {
NSLog("%@", "Failed to parse system_profiler results. \(error.localizedDescription)")
return nil
}
return plist as? NSArray
}
let r = readData("SPInstallHistoryDataType")// There is no problem
let r2 = readData("SPApplicationsDataType") // Crash
注意:是的,我可以将此数据写入文件并从该文件中读取。但我试图了解问题所在。
【问题讨论】:
标签: swift macos buffer nstask system-profiler