Answers:
您可以使用Python的os
模块通过uname
以下方式获取此信息:
import os
os.uname()
此功能应在大多数Linux或类Unix发行版中提供平台和其他信息。
从Python文档中:
os.uname()
返回一个5元组,其中包含标识当前操作系统的信息。元组包含五个字符串:(系统名称,节点名称,发行版,版本,计算机)。某些系统将节点名截断为八个字符或开头部分。获取主机名的更好方法是
socket.gethostname()
甚至socket.gethostbyaddr(socket.gethostname())
。可用性:Unix的最新版本。
os.uname()[4][:3] == 'arm'
startswith
,不是startsWith
。谢谢,它有所帮助。
Pi 2的问世(这与Beaglebone Black的区别并不容易)更是一个问题。在基于Linux的系统上的/ proc / cpuinfo中(“硬件”行)可以找到最高级别的详细信息。这是一个从Adafruit GPIO代码进行解析的示例:
https://github.com/adafruit/Adafruit_Python_GPIO/blob/master/Adafruit_GPIO/Platform.py
我发现的最广泛使用的系统识别信息是:
platform._syscmd_uname('-a')
这似乎提供与shell命令相同的输出uname -a
。在大多数情况下,返回的输出与的本质上是相同的(字符串而不是5元组)os.uname()
。
我测试并发现等效输出的是OSX 10.9.5,Ubuntu 14.04和Raspbian(??)Wheezy。不过,在Synology NAS上,我可以从该platform._syscmd_uname('-a')
版本中获取更多信息:
>>> os.uname()
('Linux', [hostname], '3.10.35', [...], 'x86_64')
>>> platform._syscmd_uname('-a')
'Linux [hostname] 3.10.35 [...] x86_64 GNU/Linux synology_cedarview_1813+'
在输出中看到“ synology”,将其标识为事物表现异常的环境。
在PI 3上
import os
os.uname()[1] == 'raspberrypi'
因为:
uname -a
Linux raspberrypi 4.4.50-v7+ #970 SMP Mon Feb 20 19:18:29 GMT 2017 armv7l GNU/Linux
更好的方法(Python 代码段):
import io
def is_raspberry_pi(raise_on_errors=False):
"""Checks if Raspberry PI.
:return:
"""
try:
with io.open('/proc/cpuinfo', 'r') as cpuinfo:
found = False
for line in cpuinfo:
if line.startswith('Hardware'):
found = True
label, value = line.strip().split(':', 1)
value = value.strip()
if value not in (
'BCM2708',
'BCM2709',
'BCM2835',
'BCM2836'
):
if raise_on_errors:
raise ValueError(
'This system does not appear to be a '
'Raspberry Pi.'
)
else:
return False
if not found:
if raise_on_errors:
raise ValueError(
'Unable to determine if this system is a Raspberry Pi.'
)
else:
return False
except IOError:
if raise_on_errors:
raise ValueError('Unable to open `/proc/cpuinfo`.')
else:
return False
return True
IS_RASPBERRY_PI = is_raspberry_pi()