題:
檢測pi上是否正在運行python程序
jnesselr
2013-02-24 21:13:37 UTC
view on stackexchange narkive permalink

我有一個使用sys.platform.startswith('linux')進行測試的python腳本,但是我無法分辨x86 / 64處理器與樹莓派的ARM處理器。

我需要這樣做的原因是,運行為樹莓派針對Mac,Linux x86 / 64或Linux ARM編譯的外部腳本。

據我所知,實際上並沒有統一的方法來告訴您實際上是在樹莓派上運行。任何幫助將不勝感激。

您可以使用os.uname()獲取此信息嗎?
可以在樹莓派的所有發行版中使用嗎?對於樹莓般的喘息,它似乎有效。
六 答案:
milancurcic
2013-02-25 00:26:00 UTC
view on stackexchange narkive permalink

您可以使用Python的 os 模塊通過 uname 獲取此信息:

  import osos.uname() 

此函數應在大多數Linux或類Unix發行版中提供平台和其他信息。

摘自Python文檔:

os.uname( )

返回一個5元組,其中包含標識當前操作系統的信息。元組包含五個字符串:(系統名稱,節點名稱,發行版,版本,計算機)。某些系統將節點名截斷為八個字符或開頭部分。獲取主機名的更好方法是 socket.gethostname()甚至是 socket.gethostbyaddr(socket.gethostname())

可用性:最新Unix風格。

`os.uname()[4] [:3] =='arm'`
現在看這個的任何人,我們最終都要執行os.uname()[4] .startsWith(“ arm”)進行檢查。
@jnesselr微小的錯字,是`startswith`,而不是`startsWith`。謝謝,它有所幫助。
Wesley Mason
2017-01-26 23:57:46 UTC
view on stackexchange narkive permalink

我發現您可以從以下位置獲得Pi模型和版本:

/ sys / firmware / devicetree / base / model

例如:Raspberry Pi 3 Model B Rev 1.2

我有一個shell腳本來查找並返回內容(如果存在)。操作系統調用以讀取文件(如果存在)應該設置正確。前提是,如果不存在,則絕對不是RPi。如果是這樣,請檢查內容以確保內容。

MartyMacGyver
2015-02-18 01:59:45 UTC
view on stackexchange narkive permalink

Pi 2的問世(這與Beaglebone Black的區別並不容易)更是一個問題。在基於Linux的系統上的/ proc / cpuinfo中(“硬件”行)可以找到最高級別的詳細信息。這是一個從Adafruit GPIO代碼進行解析的示例:

https://github.com/adafruit/Adafruit_Python_GPIO/blob/master/Adafruit_GPIO/Platform.py >

這聽起來對我來說是最好的答案,因為我建議測試/ proc / cpuinfo。我以前從未見過adafruit的platform.py,但是仔細看,這是有道理的。另外,如果文件不存在,您將知道它不是基於Linux的系統。謝謝你:)。有我的+1。
昨天,我在嘗試使py-gaugette與Pi2配合使用時遇到了此問題……(當前)使用的平台模塊方法不幸地在Pi2上失敗了,希望也能從中受益。 https://github.com/guyc/py-gaugette/issues/12
Brock Mendel
2015-11-20 08:26:51 UTC
view on stackexchange narkive permalink

我發現的最廣泛使用的最佳系統識別信息是:

  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”,將其標識為異常行為的環境。

Artur Barseghyan
2017-10-31 19:52:24 UTC
view on stackexchange narkive permalink

更好的方法(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() 
Grzegorz Głowacki
2017-05-22 10:55:47 UTC
view on stackexchange narkive permalink

在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  
'raspberrypi'您的主機名-如果您將主機名更改為其他名稱,則此操作將無效


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...