Как получить строку, описывающую текущую платформу? - PullRequest
1 голос
/ 19 сентября 2009

Мне нужно проверить платформу, на которой я работаю, а именно: процессор, операционная система и версия операционной системы. Пример, который у меня сейчас есть, это i686-apple-darwin10. Как получить похожую строку в Linux и Windows? Я знаю, что автоинструменты предоставляют сценарий обнаружения, который генерирует эту строку, но я не могу вспомнить ее имя сейчас, и, поскольку он находится в bash, он не будет работать в Windows.

Смежный вопрос: мне никогда не удавалось понять методы обнаружения платформы. Есть ли для этого стандарты? Например, «i686-apple-darwin10» один, но я также видел стиль uname - uname -p: «Linux-i386». Каковы лучшие практики, стандартные строки и предпочтительный контекст для каждой строки платформы?

Ответы [ 6 ]

3 голосов
/ 19 сентября 2009

В системе 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
2 голосов
/ 19 сентября 2009

В качестве отправной точки вам нужно указать, на каком языке вы хотите это обнаружение.

Если вы укажете «Я хочу одну программу, которая может работать на любом компьютере и идентифицирует ее», то забудьте об этом - это не будет работать. Ни один программный файл не может работать на любом компьютере - не говоря уже о его идентификации. Одним из вариантов будет «использовать программу, о которой уже известно, что она находится в системе», но ни одна такая программа не является универсально доступной.

Wrt. языки программирования, у вас есть выбор между «сценариями» и «скомпилированными» (возможно, между «скомпилированным байтовым кодом»). В языках сценариев вам нужно выбрать тот, где переводчик уже находится в системе, или где вы можете согласиться с тем, что пользователь устанавливает переводчик перед запуском вашего сценария. Вот почему сценарии оболочки Unix так широко используются для идентификации системы. Они, конечно, ограничены системами, которые обеспечивают /bin/sh.

Для скомпилированных языков у вас есть выбор между идентификацией системы во время компиляции и во время выполнения. Время компиляции действительно распространено в C, и у различных компиляторов есть предопределенные макросы, которые вы можете использовать для идентификации компилятора, или операционной системы, или микропроцессора.

Для выполнения вам нужны системные вызовы / функции библиотеки, которые вы можете использовать. Какие из них вы можете использовать, зависит от языка программирования.

1 голос
/ 19 сентября 2009

Если python присутствует в системе (доступно для всех основных платформ), то:

import platform
print platform.platform()

Выход:

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

1 голос
/ 19 сентября 2009

Нет стандартного кроссплатформенного способа сделать это, и нет «стандартной» строки.

uname в Linux / UNIX дает вам некоторую информацию, но в основном только о работающем ядре, а не о платформе (когда вы говорите о Linux, что вы подразумеваете под «версией операционной системы»? Версия ядра - версия ОС, например, RHEL 5.3?). Windows вы можете опросить WMI, но нет командной строки, чтобы дать вам информацию.

0 голосов
/ 19 сентября 2009

Я могу помочь только для Linux и Windows. Я не знаю для других o / s, но, вероятно, * nixes такой же, как Linux.

Версия: Windows: ver, Linux: uname -a.

CPU: в Linux используется файл / proc / cpuinfo, регистр проверки Windows (HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Enum \ ACPI \ поиск для класса с процессором = процессор)

0 голосов
/ 19 сентября 2009

Запуск dxdiag в режиме без вывода сообщений предоставит вам всю информацию о Windows.

dxdiag /x outfile.xml

Ожидание существования файла .xml. Все виды информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...