পাইতে পাই যে একটি অজগর প্রোগ্রাম চলছে


23

আমি পাইগন স্ক্রিপ্ট পেয়েছি যা লিনাক্সে আছে কিনা তা পরীক্ষা করতে sys.platform.startswith ('linux') ব্যবহার করে তবে আমি x86 / 64 প্রসেসরের মধ্যে পার্থক্য বলতে পারি না, এবং রাস্পবেরি পাই এর এআরএম প্রসেসর।

আমার এটির কারণটি হ'ল, একটি বাহ্যিক স্ক্রিপ্ট চালানো যা ম্যাস্প, লিনাক্স x86 / 64 বা রাস্পবেরি পাইয়ের জন্য লিনাক্স এআরএম এর জন্য সংকলিত।

আমি যা বলতে পারি, সেখান থেকে সত্যিই কোনও একীকরণের উপায় নেই যে আপনি আসলে রাস্পবেরি পাইতে চালাচ্ছেন। কোন সাহায্য প্রশংসা করা হবে।


1
আপনি কি এই তথ্যটি পেতে os.uname () ব্যবহার করতে পারেন?
মিলানসার্কিক

তা কি রাস্পবেরি পাইয়ের জন্য সমস্ত ডিস্ট্রোজে কাজ করবে? রাস্পবিয়ান হুইজে, এটি কাজ করে বলে মনে হচ্ছে।
jnesselr

উত্তর:


12

আপনি পাইথনের osমডিউলটি এই তথ্যটি পেতে পেতে ব্যবহার করতে পারেন uname:

import os
os.uname()

এই ফাংশনটির বেশিরভাগ লিনাক্স বা ইউনিক্সের মতো বিতরণগুলির প্ল্যাটফর্ম এবং অন্যান্য তথ্য সরবরাহ করা উচিত।

পাইথন ডকুমেন্টেশন থেকে:

os.uname ()

বর্তমান অপারেটিং সিস্টেম শনাক্ত করে তথ্যযুক্ত একটি 5-টিপল ফিরিয়ে দিন। টিপলটিতে পাঁচটি স্ট্রিং রয়েছে: (সংজ্ঞা, নামকরণ, প্রকাশ, সংস্করণ, মেশিন)। কিছু সিস্টেম নোডনামটি আটটি অক্ষরে বা নেতৃস্থানীয় উপাদানকে কেটে দেয়; হোস্টনেম পাওয়ার আরও ভাল উপায় হ'ল socket.gethostname()বা এমনকি socket.gethostbyaddr(socket.gethostname())

উপলভ্যতা: ইউনিক্সের সাম্প্রতিক স্বাদসমূহ।


2
os.uname()[4][:3] == 'arm'
অরেঞ্জটাক্স

2
যে কেউ এখন এটি দেখে, আমরা os.uname () [4]। স্টার্টস উইথ ("বাহু") পরীক্ষা করে শেষ করেছি।
jnesselr

2
@ জনেসেলার ছোট টাইপো, এটি হয় startswithনা startsWith। ধন্যবাদ, এটি সাহায্য করেছে।
নিশান্ত

5

আমি পেয়েছি আপনি পাই মডেল এবং সংস্করণটি থেকে পেতে পারেন:

/ Sys / ফার্মওয়্যার / devicetree / বেস / মডেল

উদাঃ রাস্পবেরি পাই 3 মডেল বি রেভ 1.2

এটি সন্ধান করার জন্য আমার কাছে একটি শেল স্ক্রিপ্ট রয়েছে এবং সামগ্রীগুলি উপস্থিত থাকলে তা ফিরিয়ে আনতে পারি। যদি কোনও ওএস কল উপস্থিত থাকে তবে ফাইলটি পড়তে হবে আপনার সঠিক হওয়া উচিত। ভিত্তিটি হ'ল এটি যদি না থাকে তবে অবশ্যই এটি আরপিআই নয়। যদি তা হয় তবে কনটেন্টটি নিশ্চিত হয়ে নিশ্চিত করুন।


3

পাই 2 এর আবির্ভাবের ক্ষেত্রে এটি আরও সমস্যা (যা বিগলবোন ব্ল্যাক থেকে পৃথক করা সহজ নয়)। লিনাক্স-ভিত্তিক সিস্টেমে ('হার্ডওয়্যার' লাইন) / proc / cpuinfo- র সর্বোচ্চ স্তরের বিশদটি পাওয়া যায়। অ্যাডাফ্রুট জিপিআইও কোড থেকে পার্স করার একটি উদাহরণ এখানে রয়েছে:

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


1
এটি আমার কাছে সেরা উত্তরের মতো মনে হচ্ছে, যেহেতু আমি পরীক্ষার / প্রোক / সিপুইনফোর পরামর্শ দেব। আমি অ্যাডাফুর্ট থেকে প্ল্যাটফর্ম.পিটি আগে কখনও দেখিনি, তবে এটির দিকে তাকালে তা বোঝা যায়। এছাড়াও যদি ফাইলটি বিদ্যমান না থাকে তবে আপনি জানবেন এটি কোনও লিনাক্স ভিত্তিক সিস্টেম নয়। এর জন্য ধন্যবাদ :). আমার +1 আছে।
পিটার

পাই-গজেটটি আমার পাই 2 এর সাথে কাজ করার চেষ্টা করার সময় আমি গতকাল এটির মুখোমুখি হয়েছিলাম ... এটি (বর্তমানে) প্ল্যাটফর্ম মডিউল পদ্ধতিটি ব্যবহার করে যা দুর্ভাগ্যক্রমে পাই 2 এর সাথে ব্যর্থ হয় এবং আশা করি এটিও এতে উপকৃত হবে। github.com/guyc/py-gaugette/issues/12
MartyMacGyver

3

আমি যে সর্বাধিক প্রয়োগযোগ্য-প্রয়োগযোগ্য সিস্টেম-শনাক্তকরণ তথ্য পেয়েছি তা হ'ল:

platform._syscmd_uname('-a')

এটি শেল কমান্ডের মতো একই আউটপুট দেয় বলে মনে হয় uname -a। বেশিরভাগ ক্ষেত্রে প্রত্যাবর্তিত আউটপুট মূলত একই (5-টিউপলের পরিবর্তে একটি স্ট্রিং) থাকে os.uname()

আমি পরীক্ষিত এবং সমপরিমাণ ফলাফল খুঁজে পেয়েছি তারা হ'ল OSX 10.9.5, উবুন্টু 14.04, এবং রাস্পিয়ান (??) হুইজি। একটি সিএনোলজি এনএএস-তে, যদিও আমি 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+'

সেখানে আউটপুটে "সিনোলজি" দেখলে এটি এমন পরিবেশ হিসাবে চিহ্নিত হয় যেখানে জিনিসগুলি অপ্রত্যাশিতভাবে আচরণ করে।


1

এটি করার সর্বোত্তম উপায় (পাইথন কোড স্নিপেট ):

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

পিআই 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

8
আপনার হোস্টনামটি 'রাস্প্পেরপি' - আপনি হোস্টনামকে অন্য কিছুতে পরিবর্তন করলে এটি কাজ করবে না
rhu
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.