"platform" --- Πρόσβαση στα αναγνωριστικά δεδομένα της υποκείμενης πλατφόρμας
*****************************************************************************

**Πηγαίος κώδικας:** Lib/platform.py

======================================================================

Σημείωση:

  Συγκεκριμένες πλατφόρμες καταγεγραμμένες αλφαβητικά, με το Linux να
  περιλαμβάνεται στην ενότητα Unix.


Cross Platform
==============

platform.architecture(executable=sys.executable, bits='', linkage='')

   Υποβάλλει ερώτημα στο δεδομένο εκτελέσιμο αρχείο (προεπιλογή είναι
   το εκτελέσιμο του δυαδικού διερμηνέα Python) για διάφορες
   πληροφορίες αρχιτεκτονικής.

   Επιστρέφει μια πλειάδα "(bits, linkage)" που περιέχει πληροφορίες
   για την αρχιτεκτονική των bit και την μορφή σύνδεσης που
   χρησιμοποιείται για το εκτελέσιμο αρχείο. Και οι δύο τιμές
   επιστρέφονται ως συμβολοσειρές.

   Οι τιμές που δεν μπορούν να προσδιοριστούν επιστρέφονται όπως
   δίνονται από τις προκαθορισμένες παραμέτρους. Αν η τιμή του bits
   δοθεί ως "''", τότε χρησιμοποιείται το "sizeof(pointer)" (ή το
   "sizeof(long)" στην έκδοση Python < 1.5.2) ως δείκτης για το
   υποστηριζόμενο μέγεθος δεικτών.

   Η συνάρτηση βασίζεται στην εντολή του συστήματος "file" για την
   εκτέλεση της πραγματικής εργασίας. Αυτή είναι διαθέσιμη στα
   περισσότερα αν όχι σε όλα τα συστήματα Unix και σε ορισμένα μη-Unix
   συστήματα, και μόνο αν το εκτελέσιμο δείχνει στον διερμηνέα της
   Python. Χρησιμοποιούνται εύλογες προεπιλεγμένες τιμές όταν οι
   παραπάνω προϋποθέσεις δεν πληρούνται.

   Σημείωση:

     Στο macOS (και ίσως και σε άλλες πλατφόρμες), τα εκτελέσιμα
     αρχεία μπορεί να είναι καθολικά αρχεία που περιέχουν μέσα
     πολλαπλές αρχιτεκτονικές.Για να προσδιορίσετε αν ο τρέχων
     διερμηνέας είναι 64-bit, είναι πιο αξιόπιστο να ελέγξετε το
     χαρακτηριστικό "sys.maxsize":

        is_64bits = sys.maxsize > 2**32

platform.machine()

   Επιστρέφει τον τύπο του μηχανήματος, π.χ. "'AMD64'". Επιστρέφει μια
   κενή συμβολοσειρά αν η τιμή δεν μπορεί να προσδιοριστεί.

   Η έξοδος εξαρτάται από την πλατφόρμα και μπορεί να διαφέρει ως προς
   τα κεφαλαία/πεζά και τις συμβάσεις ονοματοδοσίας.

platform.node()

   Επιστρέφει το όνομα δικτύου του υπολογιστή (ενδέχεται να μην είναι
   πλήρως καθορισμένο!). Επιστρέφει μια κενή συμβολοσειρά, αν η τιμή
   δεν μπορεί να προσδιοριστεί.

platform.platform(aliased=False, terse=False)

   Επιστρέφει μια συμβολοσειρά που προσδιορίζει την υποκείμενη
   πλατφόρμα με όσο το δυνατόν περισσότερες χρήσιμες πληροφορίες.

   Η έξοδος προορίζεται να είναι *φιλική - ευανάγνωστη από τον
   άνθρωπο* και όχι αναγνώσιμη από μηχανή. Μπορεί να φαίνεται
   διαφορετική σε διαφορετικές πλατφόρμες και αυτό είναι σκόπιμο.

   Αν το *aliased* είναι αληθές, η συνάρτηση θα χρησιμοποιήσει
   ψευδώνυμα για διάφορες πλατφόρμες που αναφέρουν ονόματα συστημάτων
   διαφορετικά από τα κοινά τους ονόματα, για παράδειγμα το SunOS θα
   αναφέρεται ως Solaris. Η συνάρτηση "system_alias()" χρησιμοποιείται
   για την υλοποίηση αυτού.

   Αν το *terse* οριστεί σε αληθές, η συνάρτηση επιστρέφει μόνο τις
   απολύτως απαραίτητες πληροφορίες για την αναγνώριση της πλατφόρμας.

   Άλλαξε στην έκδοση 3.8: Στο macOS, η συνάρτηση χρησιμοποιεί τώρα
   την "mac_ver()", αν αυτή επιστρέψει μη κενή συμβολοσειρά έκδοσης,
   για να λάβει την έκδοση του macOS αντί για την έκδοση Darwin.

platform.processor()

   Επιστρέφει το (πραγματικό) όνομα του επεξεργαστή, π.χ. "'amdk6'".

   Επιστρέφεται μια κενή συμβολοσειρά εάν η τιμή δεν μπορεί να
   προσδιοριστεί. Σημειώστε ότι πολλές πλατφόρμες δεν παρέχουν αυτή
   την πληροφορία ή απλώς επιστρέφουν την ίδια τιμή με αυτή της
   "machine()". Το NetBSD το κάνει αυτό.

platform.python_build()

   Επιστρέφει μια πλειάδα "(buildno, builddate)" που δηλώνει τον
   αριθμό κατασκευής και την ημερομηνία κατασκευής της Python ως
   συμβολοσειρές.

platform.python_compiler()

   Επιστρέφει μια συμβολοσειρά που προσδιορίζει τον μεταγλωττιστή που
   χρησιμοποιήθηκε για την μεταγλώττιση της Python.

platform.python_branch()

   Επιστρέφει μια συμβολοσειρά που προσδιορίζει το branch του
   συστήματος ελέγχου εκδόσεων (SCM) της υλοποίησης της Python.

platform.python_implementation()

   Επιστρέφει μια συμβολοσειρά που προσδιορίζει την υλοποίηση της
   Python. Πιθανές τιμές είναι: 'CPython', 'IronPython', 'Jython',
   'PyPy'.

platform.python_revision()

   Επιστρέφει μια συμβολοσειρά που προσδιορίζει την αναθεώρηση SCM της
   υλοποίησης της Python.

platform.python_version()

   Επιστρέφει την έκδοση της Python ως συμβολοσειρά
   "'major.minor.patchlevel'".

   Σημειώστε ότι σε αντίθεση με το "sys.version" της Python, η
   επιστρεφόμενη τιμή θα περιλαμβάνει πάντα το επίπεδο διόρθωσης (το
   οποίο προεπιλεγμένα είναι 0).

platform.python_version_tuple()

   Επιστρέφει την έκδοση της Python ως πλειάδα "(major, minor,
   patchlevel)" από συμβολοσειρές.

   Σημειώστε ότι, σε αντίθεση με την "sys.version" της Python, η
   επιστρεφόμενη τιμή θα περιλαμβάνει πάντα το επίπεδο ενημέρωσης (με
   προεπιλογή το "'0'").

platform.release()

   Επιστρέφει την έκδοση του συστήματος, π.χ. "'2.2.0'" ή "'NT'".
   Επιστρέφεται μια κενή συμβολοσειρά αν η τιμή δεν μπορεί να
   καθοριστεί.

platform.system()

   Επιστρέφει το όνομα του συστήματος/λειτουργικού, όπως "'Linux'",
   "'Darwin'", "'Java'", "'Windows'". Επιστρέφεται μια κενή
   συμβολοσειρά αν η τιμή δεν μπορεί να καθοριστεί.

   Στο iOS και το Android, αυτό επιστρέφει το όνομα του λειτουργικό
   συστήματος που βλέπει ο χρήστης δηλαδή, "'iOS", "'iPadOS'" ή
   "'Android'"). Για να λάβετε το όνομα του πυρήνα ("'Darwin'" ή
   "'Linux'"), χρησιμοποιήστε τη "os.uname()".

platform.system_alias(system, release, version)

   Επιστρέφει μια πλειάδα "(system, release, version)" με ονόματα
   εμπορικής χρήσης που χρησιμοποιούνται για ορισμένα συστήματα.
   Επίσης, αναδιατάσσει ορισμένες πληροφορίες σε περιπτώσεις που
   διαφορετικά θα προκαλούσαν σύγχυση.

platform.version()

   Επιστρέφει την έκδοση κυκλοφορίας του συστήματος, π.χ. "'#3 on
   degas'". Επιστρέφεται μια κενή συμβολοσειρά εάν η τιμή δεν μπορεί
   να προσδιοριστεί.

   Στο iOS και το Android, αυτή είναι η έκδοση του λειτουργικό
   συστήματος που βλέπει ο χρήστης. Για να λάβετε την έκδοση του
   πυρήνα Darwin ή Linux, χρησιμοποιήστε τη "os.uname()".

platform.uname()

   Αρκετά φορητή διεπαφή uname. Επιστρέφει ένα "namedtuple()" που
   περιέχει έξι ιδιότητες: "system", "node", "release", "version",
   "machine" και "processor".

   Το "processor" επιλύεται αργά, κατόπιν αιτήματος.

   Σημείωση: τα ονόματα των πρώτων δύο ιδιοτήτων διαφέρουν από αυτά
   που παρουσιάζονται από την συνάρτηση "os.uname()", όπου ονομάζονται
   "sysname" και "nodename".

   Οι τιμές που δεν μπορούν να προσδιοριστούν ορίζονται σε "''".

   Άλλαξε στην έκδοση 3.3: Το αποτέλεσμα άλλαξε από μια πλειάδα σε
   "namedtuple()".

   Άλλαξε στην έκδοση 3.9: Το "processor" αναλύεται καθυστερημένα αντί
   άμεσα.

platform.invalidate_caches()

   Καθαρίστε την εσωτερική μνήμη από πληροφορίες όπως τη "uname()".
   Αυτό είναι συνήθως χρήσιμο όταν η "node()" της πλατφόρμας αλλάζει
   από μια εξωτερική διεργασία και κάποιος πρέπει να ανακτήσει την
   ενημερωμένη τιμή.

   Added in version 3.14.


Πλατφόρμα Java
==============

platform.java_ver(release='', vendor='', vminfo=('', '', ''), osinfo=('', '', ''))

   Διεπαφή έκδοσης για Jython.

   Επιστρέφει μια πλειάδα "(release, vendor, vminfo, osinfo)" όπου το
   *vminfo* είναι μια πλειάδα "(vm_name, vm_release, vm_vendor)" και
   το *osinfo* είναι μια πλειάδα "(os_name, os_version, os_arch)".
   Τιμές που δεν μπορούν να προσδιοριστούν ορίζονται στα προεπιλεγμένα
   που δίνονται ως παράμετροι (τα οποία προεπιλεγμένα είναι όλα "''").

   Καταργήθηκε από την έκδοση 3.13, θα αφαιρεθεί στην έκδοση 3.15:
   Ήταν σε μεγάλο βαθμό ακατάλληλο για δοκιμές, είχε μια μπερδεμένη
   διεπαφή API και ήταν χρήσιμο μόνο για την υποστήριξη του Jython.


Πλατφόρμα Windows
=================

platform.win32_ver(release='', version='', csd='', ptype='')

   Λαμβάνει επιπλέον πληροφορίες έκδοσης από το Μητρώο των Windows και
   επιστρέφει μια πλειάδα "(release, version, csd, ptype)" που
   αναφέρεται στην έκδοση του λειτουργικού συστήματος, τον αριθμό
   έκδοσης, το επίπεδο CSD (service pack) και τον τύπο λειτουργικού
   συστήματος (πολυεπεξεργαστικό/μονοεπεξεργαστικό). Τιμές που δεν
   μπορούν να προσδιοριστούν ορίζονται στα προεπιλεγμένα που δίνονται
   ως παράμετροι (όλα προεπιλέγονται σε κενές συμβολοσειρές).

   Ως υπόδειξη: το *ptype* είναι "'Uniprocessor Free'" σε μηχανές NT
   με έναν επεξεργαστή και "'Multiprocessor Free'" σε μηχανές με
   πολλαπλούς επεξεργαστές. Ο όρος *'Free'* αναφέρεται σε έκδοση του
   λειτουργικού συστήματος χωρίς κώδικα αποσφαλμάτωσης. Θα μπορούσε
   επίσης να αναφέρει *'Checked'* που σημαίνει ότι η έκδοση του
   λειτουργικού συστήματος χρησιμοποιεί κώδικα αποσφαλμάτωσης, δηλαδή
   κώδικα που ελέγχει ορίσματα, εύρη κ.λπ.

platform.win32_edition()

   Επιστρέφει μια συμβολοσειρά που αναπαριστά την τρέχουσα έκδοση των
   Windows ή "None" αν δεν μπορεί να καθοριστεί η τιμή. Πιθανές τιμές
   περιλαμβάνουν, αλλά δεν περιορίζονται σε "'Enterprise'",
   "'IoTUAP'", "'ServerStandard'" και "'nanoserver'".

   Added in version 3.8.

platform.win32_is_iot()

   Επιστρέφει "True" αν η έκδοση των Windows που επιστρέφεται από την
   "win32_edition()" αναγνωρίζεται ως έκδοση IoT.

   Added in version 3.8.


Πλατφόρμα macOS
===============

platform.mac_ver(release='', versioninfo=('', '', ''), machine='')

   Λαμβάνει πληροφορίες έκδοσης macOS και τις επιστρέφει ως πλειάδα
   "(release, versioninfo, machine)" όπου το *versioninfo* είναι μια
   πλειάδα "(version, dev_stage, non_release_version)".

   Οι τιμές που δεν μπορούν να προσδιοριστούν ορίζονται ως "''". Όλα
   τα στοιχεία της πλειάδας είναι συμβολοσειρές.


Πλατφόρμα iOS
=============

platform.ios_ver(system='', release='', model='', is_simulator=False)

   Λάβετε πληροφορίες για την έκδοση του iOS και επιστρέψτε τις ως μια
   "namedtuple()" με τα εξής χαρακτηριστικά:

   * "system" είναι το όνομα του λειτουργικού συστήματος; είτε "'iOS'"
     ή "'iPadOS'".

   * "release" είναι ο αριθμός έκδοσης iOS ως μια συμβολοσειρά (π.χ.,
     "'17.2'").

   * Το "model" είναι ο αναγνωριστικό αριθμός μοντέλου της συσκευής.
     Αυτό θα είναι μια συμβολοσειρά όπως "'iPhone13,2'" για μια φυσική
     συσκευή, ή "'iPhone'" για έναν εξομοιωτή.

   * Το "is_simulator" είναι μια δυαδική τιμή που περιγράφει αν η
     εφαρμογή εκτελείται σε εξομοιωτή ή σε φυσική συσκευή.

   Οι καταχωρήσεις που δεν μπορούν να προσδιοριστούν ορίζονται στις
   προεπιλεγμένες τιμές που δίνονται ως παράμετροι.


Πλατφόρμες Unix
===============

platform.libc_ver(executable=sys.executable, lib='', version='', chunksize=16384)

   Προσπαθεί να προσδιορίσει την έκδοση της libc με την οποία είναι
   συνδεδεμένο το εκτελέσιμο αρχείο (προεπιλογή είναι ο διερμηνέας της
   Python). Επιστρέφει μια πλειάδα συμβολοσειρών "(lib, version)", η
   οποία ορίζεται στις δοθείσες παραμέτρους σε περίπτωση αποτυχίας της
   αναζήτησης.

   Σημειώστε ότι αυτή η συνάρτηση έχει λεπτομερή γνώση του τρόπου με
   τον οποίο οι διάφορες εκδόσεις της libc προσθέτουν σύμβολα στο
   εκτελέσιμο και πιθανώς μπορεί να χρησιμοποιηθεί μόνο για εκτελέσιμα
   που έχουν μεταγλωττιστεί με το **gcc**.

   Το αρχείο διαβάζεται και σαρώνονται τμήματά του μεγέθους
   *chunksize* bytes.


Πλατφόρμες Linux
================

platform.freedesktop_os_release()

   Λαμβάνει την ταυτότητα του λειτουργικού συστήματος από το αρχείο
   "os-release" και την επιστρέφει ως λεξικό. Το αρχείο "os-release"
   είναι ένα πρότυπο του freedesktop.org και είναι διαθέσιμο στις
   περισσότερες διανομές Linux. Μια αξιοσημείωτη εξαίρεση είναι το
   Android και οι διανομές που βασίζονται σε Android.

   Κάνει raise εξαίρεση "OSError" ή την υποκλάση όταν δεν είναι δυνατή
   η ανάγνωση ούτε του "/etc/os-release" ούτε του "/usr/lib/os-
   release".

   Σε περίπτωση επιτυχίας, η συνάρτηση επιστρέφει ένα λεξικό όπου τα
   κλειδιά και οι τιμές είναι συμβολοσειρές. Οι τιμές έχουν τους
   ειδικούς χαρακτήρες του, όπως """ και "$", χωρίς εισαγωγικά. Τα
   πεδία "NAME", "ID" και "PRETTY_NAME" ορίζονται πάντα σύμφωνα με το
   πρότυπο. Όλα τα άλλα πεδία είναι προαιρετικά. Οι προμηθευτές μπορεί
   να περιλαμβάνουν πρόσθετα πεδία.

   Σημειώστε ότι πεδία όπως τα "NAME", "VERSION" και "VARIANT" είναι
   συμβολοσειρές κατάλληλες για παρουσίαση στους χρήστες. Τα
   προγράμματα θα πρέπει να χρησιμοποιούν πεδία όπως τα "ID",
   "ID_LIKE", "VERSION_ID" ή "VARIANT_ID" για την αναγνώριση διανομών
   Linux.

   Παράδειγμα:

      def get_like_distro():
          info = platform.freedesktop_os_release()
          ids = [info["ID"]]
          if "ID_LIKE" in info:
              # ids are space separated and ordered by precedence
              ids.extend(info["ID_LIKE"].split())
          return ids

   Added in version 3.10.


Πλατφόρμα Android
=================

platform.android_ver(release='', api_level=0, manufacturer='', model='', device='', is_emulator=False)

   Λάβετε πληροφορίες για τη συσκευή Android. Επιστρέφει μια
   "namedtuple()" με τα εξής χαρακτηριστικά. Οι τιμές που δεν μπορούν
   να προσδιοριστούν ορίζονται στις προεπιλεγμένες τιμές που δίνονται
   ως παράμετροι.

   * "release" - Η έκδοση του Android, ως συμβολοσειρά (π.χ. ""14"").

   * "api_level" - Το επίπεδο API της εκτελούμενης συσκευής, ως
     ακέραιος αριθμός (π.χ. "34" για Android 14). Για να λάβετε το
     επίπεδο API με το οποίο έχει κατασκευαστεί η Python, δείτε τη
     "sys.getandroidapilevel()".

   * "manufacturer" - Το όνομα του κατασκευαστή.

   * "model" - Το όνομα του μοντέλου – συνήθως το εμπορικό όνομα ή ο
     αριθμός μοντέλου.

   * "device" - Το όνομα της συσκευής – συνήθως ο αριθμός μοντέλου ή
     ένα κωδικό όνομα.

   * "is_emulator" - "True" αν η συσκευή είναι εξομοιωτής; "False" αν
     είναι φυσική συσκευή.

   Η Google διατηρεί μια λίστα με γνωστά ονόματα μοντέλων συσκευών.

   Added in version 3.13.


Χρήση από γραμμή εντολών
========================

Το "platform" μπορεί επίσης να κληθεί απευθείας χρησιμοποιώντας την
επιλογή "-m" του διερμηνέα:

   python -m platform [--terse] [--nonaliased] [{nonaliased,terse} ...]

Οι εξής επιλογές γίνονται αποδεκτές:

--terse

   Εκτυπώνει συνοπτικές πληροφορίες για την πλατφόρμα. Αυτό είναι
   ισοδύναμο με την κλήση "platform.platform()" με το όρισμα *terse*
   ορισμένο σε "True".

--nonaliased

   Εκτυπώνει πληροφορίες για την πλατφόρμα χωρίς την αντικατάσταση του
   ονόματος του συστήματος/ λειτουργικού. Αυτό είναι ισοδύναμο με την
   κλήση της "platform.platform()" με το όρισμα *aliased* ορισμένο σε
   "True".

Μπορείτε επίσης να περάσετε ένα ή περισσότερα ορίσματα θέσης ("terse",
"nonaliased") για να ελέγξετε ρητά τη μορφή της εξόδου. Αυτά
συμπεριφέρονται όπως οι αντίστοιχες επιλογές τους.
