我有一個使用sys.platform.startswith('linux')進行測試的python腳本,但是我無法分辨x86 / 64處理器與樹莓派的ARM處理器。
我需要這樣做的原因是,運行為樹莓派針對Mac,Linux x86 / 64或Linux ARM編譯的外部腳本。
據我所知,實際上並沒有統一的方法來告訴您實際上是在樹莓派上運行。任何幫助將不勝感激。
我有一個使用sys.platform.startswith('linux')進行測試的python腳本,但是我無法分辨x86 / 64處理器與樹莓派的ARM處理器。
我需要這樣做的原因是,運行為樹莓派針對Mac,Linux x86 / 64或Linux ARM編譯的外部腳本。
據我所知,實際上並沒有統一的方法來告訴您實際上是在樹莓派上運行。任何幫助將不勝感激。
您可以使用Python的 os
模塊通過 uname
獲取此信息:
import osos.uname()
此函數應在大多數Linux或類Unix發行版中提供平台和其他信息。
摘自Python文檔:
os.uname( )
返回一個5元組,其中包含標識當前操作系統的信息。元組包含五個字符串:(系統名稱,節點名稱,發行版,版本,計算機)。某些系統將節點名截斷為八個字符或開頭部分。獲取主機名的更好方法是
socket.gethostname()
甚至是socket.gethostbyaddr(socket.gethostname())
。可用性:最新Unix風格。
我發現您可以從以下位置獲得Pi模型和版本:
/ sys / firmware / devicetree / base / model
例如:Raspberry Pi 3 Model B Rev 1.2
我有一個shell腳本來查找並返回內容(如果存在)。操作系統調用以讀取文件(如果存在)應該設置正確。前提是,如果不存在,則絕對不是RPi。如果是這樣,請檢查內容以確保內容。
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
相同的輸出。在大多數情況下,返回的輸出與 os.uname()
的輸出基本上是相同的(字符串而不是5元組)。
我測試過的輸出和發現等效的輸出是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”,將其標識為異常行為的環境。
更好的方法(Python 代碼片段):
import iodef is_raspberry_pi(raise_on_errors = False):“”“檢查Raspberry PI。:return :“”“ try:使用io.open('/ proc / cpuinfo','r')作為cpuinfo:found = cpuinfo中的行為False:if line.startswith('Hardware'):found =真標籤,值= line.strip()。split(':',1)value = value.strip()如果值不在('BCM2708','BCM2709','BCM2835','BCM2836')中:如果raise_on_errors:提高ValueError('該系統似乎不是''Raspberry Pi。')否則:如果未找到,則返回False:如果raise_on_errors:引發ValueError('無法確定此系統是否為Raspberry Pi。')否則:返回False,除了IOError:如果raise_on_errors:引發ValueError('無法打開`/ proc / cpuinfo`。')否則:返回False返回TrueIS_RASPBERRY_PI = is_raspberry_pi()
在PI 3上
import os os.uname()[1] =='raspberrypi'
原因:
uname -aLinux raspberrypi 4.4.50-v7 +#970 SMP Mon Feb 20 19:18:29 GMT 2017 armv7l GNU / Linux