0

当我尝试为使用 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 时,我得到了空白输出。

4

1 回答 1

0

Shell 执行脚本,而不是二进制文件。解决办法是直接运行工具;几乎没有任何理由仅仅为了执行程序而启动 shell:

process.launchPath = "/usr/sbin/system_profiler"
process.arguments = ["SPHardwareDataType"]

此外,stderr如果您不打算使用它,那么设置管道是没有意义的:

/* process.standardError = pipe */
于 2018-11-23T20:40:29.573 回答