Macos 在OSX下获取基本机器信息

Macos 在OSX下获取基本机器信息,macos,system-profiler,Macos,System Profiler,我编写了一个非常简短的程序来收集第三方应用程序发出的一些日志文件。它把文件拉上拉链,然后通过电子邮件发给我 我还想收集一些关于这台机器的信息,特别是它的图形功能。基本上,我想从系统报告,硬件和图形/显示器两页。格式塔已经消失了,所以我正在寻找其他的解决方案 我在这里找到了一个解决方案,以便使用sysctlbyname获得机器的模型,但这里的值似乎非常有限 那么,有没有人有一种简单的方法来获取GPU信息?使用终端命令行中的System Profiler,或者作为NSTask执行它: /usr/sb

我编写了一个非常简短的程序来收集第三方应用程序发出的一些日志文件。它把文件拉上拉链,然后通过电子邮件发给我

我还想收集一些关于这台机器的信息,特别是它的图形功能。基本上,我想从系统报告,硬件和图形/显示器两页。格式塔已经消失了,所以我正在寻找其他的解决方案

我在这里找到了一个解决方案,以便使用sysctlbyname获得机器的模型,但这里的值似乎非常有限


那么,有没有人有一种简单的方法来获取GPU信息?

使用终端命令行中的System Profiler,或者作为NSTask执行它:

/usr/sbin/system_profiler | awk '/^Graphics/{p=1;print;next} /^[A-Z]/{p=0} p'
输出

Graphics/Displays: 

AMD Radeon R9 M395:

  Chipset Model: AMD Radeon R9 M395
  Type: GPU
  Bus: PCIe
  PCIe Lane Width: x16
  VRAM (Total): 2048 MB
  Vendor: ATI (0x1002)
  Device ID: 0x6920
  Revision ID: 0x0001
  ROM Revision: 113-C905AA-799
  EFI Driver Version: 01.00.799
  Displays:
    iMac:
      Display Type: Retina LCD
      Resolution: 5120 x 2880 Retina
      Retina: Yes
      Pixel Depth: 30-Bit Color (ARGB2101010)
      Main Display: Yes
      Mirror: Off
      Online: Yes
      Built-In: Yes

从终端中的命令行使用系统探查器,或作为NSTask执行:

/usr/sbin/system_profiler | awk '/^Graphics/{p=1;print;next} /^[A-Z]/{p=0} p'
输出

Graphics/Displays: 

AMD Radeon R9 M395:

  Chipset Model: AMD Radeon R9 M395
  Type: GPU
  Bus: PCIe
  PCIe Lane Width: x16
  VRAM (Total): 2048 MB
  Vendor: ATI (0x1002)
  Device ID: 0x6920
  Revision ID: 0x0001
  ROM Revision: 113-C905AA-799
  EFI Driver Version: 01.00.799
  Displays:
    iMac:
      Display Type: Retina LCD
      Resolution: 5120 x 2880 Retina
      Retina: Yes
      Pixel Depth: 30-Bit Color (ARGB2101010)
      Main Display: Yes
      Mirror: Off
      Online: Yes
      Built-In: Yes

按照上面马克的回答,下面是如何用(Swift)代码来实现它。首先,我曾经运行一个shell命令:

func shell(launchPath: String, arguments: [String]) -> String
{
    let task = NSTask()
    task.launchPath = launchPath
    task.arguments = arguments

    let pipe = NSPipe()
    task.standardOutput = pipe
    task.launch()

    let data = pipe.fileHandleForReading.readDataToEndOfFile()
    let output: String = NSString(data: data, encoding: NSUTF8StringEncoding)! as String

    return output
}
然后在system_profiler中玩了一会儿之后,我发现我对两个键感兴趣,
SPHardwareDataType
SPDisplaysDataType
。这让我想知道system_profiler位于何处,但
哪个system_profiler
解决了这个问题。因此,我终于得到了我所需要的:

let ai = shell("/usr/sbin/system_profiler", arguments: ["SPHardwareDataType", "SPDisplaysDataType"])

结果是一个格式化的字符串,按原样运行非常好。

根据上面Mark的回答,下面介绍如何使用(Swift)代码执行此操作。首先,我曾经运行一个shell命令:

func shell(launchPath: String, arguments: [String]) -> String
{
    let task = NSTask()
    task.launchPath = launchPath
    task.arguments = arguments

    let pipe = NSPipe()
    task.standardOutput = pipe
    task.launch()

    let data = pipe.fileHandleForReading.readDataToEndOfFile()
    let output: String = NSString(data: data, encoding: NSUTF8StringEncoding)! as String

    return output
}
然后在system_profiler中玩了一会儿之后,我发现我对两个键感兴趣,
SPHardwareDataType
SPDisplaysDataType
。这让我想知道system_profiler位于何处,但
哪个system_profiler
解决了这个问题。因此,我终于得到了我所需要的:

let ai = shell("/usr/sbin/system_profiler", arguments: ["SPHardwareDataType", "SPDisplaysDataType"])

结果是一个格式化的字符串,很好用。

哇,在鼠标悬停之前,我甚至不知道你可以这么做。哇,在鼠标悬停之前,我甚至不知道你可以这么做。我应该在我的应用程序中使用NSTask执行吗?我从来没有用烟斗试过,如果你喜欢它的功能,是的。或者你可以将
awk
内容保留下来,然后用Objective-C对其进行解析。@MauryMarkowitz刚刚添加了一个轻微的澄清,顺便说一句。我应该在我的应用程序中使用NSTask执行吗?我从来没有用烟斗试过,如果你喜欢它的功能,是的。或者你也可以把
awk
的东西放在一边,用Objective-C对它进行解析。@MauryMarkowitz只是补充了一点澄清,顺便说一句。没问题,只要你选择了正确的键,这对于格式塔替换来说是非常有用的。他们应该把它构建到一个API中,IMHO。没问题,这对于格式塔替换非常有用,只要你选择了正确的键。他们应该将其构建到API中,IMHO。