Pi üzerinde bir python programının çalıştığını tespit edin.


23

Linux'ta olup olmadığını test etmek için sys.platform.startswith ('linux') kullanan bir python betiği aldım, ancak x86 / 64 işlemci ile ahududu pi'nin ARM'i arasındaki farkı söyleyemem işlemci.

Buna ihtiyacım olan, ah, pi için mac, linux x86 / 64 veya linux ARM için derlenmiş bir harici script çalıştırmak.

Söyleyebileceğim şeye göre, aslında ahududu pi ile çalıştığını söylemenin birleşik bir yolu yok. Herhangi bir yardım takdir edilecektir.


1
Bu bilgiyi elde etmek için os.uname () kullanabilir misiniz?
milancurcic

Bu ahududu pi için tüm dağıtımlarda işe yarayacak mı? Raspbian wheezy'de işe yarıyor.
jnesselr

Yanıtlar:


12

osBu bilgiyi aşağıdaki yollarla elde etmek için Python modülünü kullanabilirsiniz uname:

import os
os.uname()

Bu işlev çoğu Linux veya Unix benzeri dağıtım hakkında platform ve diğer bilgiler sağlamalıdır.

Python belgelerine göre:

os.uname ()

Geçerli işletim sistemini tanımlayan bilgileri içeren 5 tuple döndürün. Bağlantı beş karakter içerir: (sysname, nodename, release, sürüm, makine). Bazı sistemler düğüm adını sekiz karaktere veya öncü bileşene keser; Ana bilgisayar adını almak için daha iyi bir yoldur socket.gethostname()hatta socket.gethostbyaddr(socket.gethostname()).

Durumu: Unix'in son lezzetleri.


2
os.uname()[4][:3] == 'arm'
OrangeTux

2
Şimdi buna bakanlar, kontrol etmek için os.uname () [4] .startsWith ("arm") yaparak sona erdi.
jnesselr

2
@jnesselr minik yazım hatası, öyle startswithdeğil startsWith. Teşekkürler, yardımcı oldu.
Nishant

5

Pi modelini ve sürümünü nereden alabileceğinizi buldum:

/ Sys / firmware / devicetree / baz / model

Ör: Ahududu Pi 3 Model B Rev 1.2

Bunu aramak ve varsa içeriğini döndürmek için bir kabuk betiği var. Varsa dosyayı okumak için bir OS çağrısı sizi doğru ayarlamalıdır. Öncül, eğer yoksa, kesinlikle bir RPI değil. Varsa, emin olmak için içeriği inceleyin.


3

Bu, Pi2'nin ortaya çıkmasıyla ilgili bir problemdir (Beaglebone Black'den ayırt etmek kolay değildir). En yüksek detay seviyesi Linux tabanlı sistemlerde ('Donanım' satırı) / proc / cpuinfo'da bulunur. İşte Adafruit GPIO kodundan ayrıştırmaya bir örnek:

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


1
Bu bana en iyi cevap gibi geliyor çünkü test / proc / cpuinfo. Platform.py 'yi daha önce adafruit' ten hiç görmedim, fakat incelemek mantıklı geliyor. Ayrıca dosya yoksa, bunun linux tabanlı bir sistem olmadığını bileceksiniz. Bunun için teşekkürler :). + 1'im var.
Peter,

Pi2 ile çalışırken Py-Gaugette'i almaya çalışırken dün karşılaştığım ... (şu anda) Pi2'de ne yazık ki başarısız olan ve bundan da faydalanacak platform modülü yöntemini kullanıyor. github.com/guyc/py-gaugette/issues/12
MartyMacGyver

3

Bulduğum en iyi sistem tanımlayıcı bilgiler:

platform._syscmd_uname('-a')

Bu, shell komutu ile aynı çıktıyı veriyor gibi görünüyor uname -a. Çoğu durumda, döndürülen çıktı esasen aynıdır (5-tuple yerine bir dize) os.uname().

Test ettiğim ve eşdeğer çıktılar bulduğumlar OSX 10.9.5, Ubuntu 14.04 ve Raspbian (??) Wheezy. Bir Synology NAS'ta, platform._syscmd_uname('-a')sürümden daha fazla bilgi alıyorum :

>>> 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+'

Çıktıda "synology" yi görmek onu olayların beklenmedik şekilde davrandığı bir ortam olarak tanımlar.


1

Bunu yapmanın daha iyi bir yolu (Python kod pasajı ):

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()

-1

PI 3'te

import os    
os.uname()[1] == 'raspberrypi'

Çünkü:

uname -a
Linux raspberrypi 4.4.50-v7+ #970 SMP Mon Feb 20 19:18:29 GMT 2017 armv7l GNU/Linux

8
'raspberrypi' ana bilgisayar adınız - ana bilgisayar adını başka bir şeyle değiştirirseniz bu işe yaramaz
rhu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.