我需要检查我所使用的平台,这意味着:处理器,操作系统和操作系统版本。我目前的一个例子是i686-apple-darwin10
。如何在Linux和Windows上获得类似的字符串?我知道autotools提供了一个生成该字符串的检测脚本,但我现在不记得它的名字了,因为它在bash中,所以它不适用于windows。
一个相关的问题是:我从未真正理解检测平台的技术。有这个标准吗?例如,“i686-apple-darwin10”就是其中之一,但我也看到了uname
- uname -p
样式:“Linux-i386”。每个平台字符串的最佳实践,标准字符串和首选上下文是什么?
答案 0 :(得分:3)
在GNU / Linux系统上,您可能需要uname
和lsb_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文件存在。各种信息。