如何获取描述当前平台的字符串?

时间:2009-09-18 20:43:30

标签: standards platform

我需要检查我所使用的平台,这意味着:处理器,操作系统和操作系统版本。我目前的一个例子是i686-apple-darwin10。如何在Linux和Windows上获得类似的字符串?我知道autotools提供了一个生成该字符串的检测脚本,但我现在不记得它的名字了,因为它在bash中,所以它不适用于windows。

一个相关的问题是:我从未真正理解检测平台的技术。有这个标准吗?例如,“i686-apple-darwin10”就是其中之一,但我也看到了uname - uname -p样式:“Linux-i386”。每个平台字符串的最佳实践,标准字符串和首选上下文是什么?

6 个答案:

答案 0 :(得分:3)

在GNU / Linux系统上,您可能需要unamelsb_release的组合。

以下uname

$ uname --help
Usage: uname [OPTION]...
Print certain system information.  With no OPTION, same as -s.

  -a, --all                print all information, in the following order,
                             except omit -p and -i if unknown:
  -s, --kernel-name        print the kernel name
  -n, --nodename           print the network node hostname
  -r, --kernel-release     print the kernel release
  -v, --kernel-version     print the kernel version
  -m, --machine            print the machine hardware name
  -p, --processor          print the processor type or "unknown"
  -i, --hardware-platform  print the hardware platform or "unknown"
  -o, --operating-system   print the operating system
      --help     display this help and exit
      --version  output version information and exit

现在使用lsb_release

$ lsb_release --help
Usage: lsb_release [options]

Options:
  -h, --help         show this help message and exit
  -v, --version      show LSB modules this system supports
  -i, --id           show distributor ID
  -d, --description  show description of this distribution
  -r, --release      show release number of this distribution
  -c, --codename     show code name of this distribution
  -a, --all          show all of the above information
  -s, --short        show requested information in short format

答案 1 :(得分:2)

作为起点,您需要指定您希望此检测的语言。

如果你指定“我想要一个可以在任何计算机上运行并识别它的单个程序”,那么就算了 - 这不行。任何程序文件都不能在任何计算机上运行 - 更不用说识别它了。一种选择是“使用已知在系统上的程序”,但没有一种这样的程序是普遍可用的。

WRT。在编程语言中,您可以选择“脚本编写”和“编译”(可能在其间使用“字节码编译”)。在脚本语言中,您需要选择解释器已经在系统上的语言,或者您可以接受用户在运行脚本之前首先安装解释器的位置。这就是Unix shell脚本如此广泛用于系统识别的原因。当然,它们仅限于提供/bin/sh的系统。

对于编译语言,您可以选择编译时和运行时系统标识。编译时间在C中很常见,各种编译器都有预定义的宏,可用于识别编译器,操作系统或微处理器。

对于运行时,您需要具有可以使用的系统调用/库函数。您可以使用哪些取决于编程语言。

答案 2 :(得分:1)

没有标准的,跨平台的方法来做到这一点,并且没有“标准”字符串。

Linux / UNIX上的uname为您提供了一些信息,但通常只关于正在运行的内核而不是关于平台(当您谈论Linux时,“操作系统版本”是什么意思) ?内核版本?操作系统版本,例如RHEL 5.3?)。 Windows可以查询WMI,但没有命令行可以提供信息。

答案 3 :(得分:1)

如果系统上存在python(适用于所有主要平台),则:

import platform
print platform.platform()

输出:

Linux-2.6.28-15-generic-i686-with-Ubuntu-9.04-jaunty

答案 4 :(得分:0)

我只能为Linux和Windows提供帮助。我不知道其他的o / s,但可能* nixes与Linux相同。

版本:Windows:ver,Linux:uname -a

CPU:在Linux中使用/ proc / cpuinfo文件,Windows检查注册表(HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Enum \ ACPI \ search for Class = Processor)

答案 5 :(得分:-1)

以静默模式运行dxdiag将为您提供有关Windows的各种信息。

dxdiag /x outfile.xml

等待.xml文件存在。各种信息。