当我尝试为使用system_profiler命令检索系统软件和硬件详细信息的应用程序创建助手时,出现以下错误。
来自XPC服务的响应:HELLO XPC
来自XPC服务的响应:/ usr / sbin / system_profiler: / usr / sbin / system_profiler:无法执行二进制文件”
下面给出了代码。
class CommandHelper: NSObject,CommandHelperProtocol {
func upperCaseString(_ string: String, withReply reply: @escaping (String) -> Void) {
let response = string.uppercased()
reply(response)
}
func loadServerURL(_ string: String, withReply reply: @escaping (String) -> Void) {
let pipe = Pipe()
let process = Process()
process.launchPath = "/bin/sh"
process.arguments = ["system_profiler","SPHardwareDataType"]
process.standardOutput = pipe
process.standardError = pipe
let fileHandle = pipe.fileHandleForReading
process.launch()
let response = String(data: fileHandle.readDataToEndOfFile(), encoding: .utf8)
print(response!)
reply(response!)
}
}
当我将launchPath设置为/ usr / sbin / system_profiler时,我得到了空白输出。
答案 0 :(得分:0)
Shell执行脚本,而不是二进制文件。解决方案是直接运行该工具。几乎没有任何理由启动Shell来执行程序:
process.launchPath = "/usr/sbin/system_profiler"
process.arguments = ["SPHardwareDataType"]
此外,如果您不打算使用stderr
管道,那就没有意义了:
/* process.standardError = pipe */