platform - Informazioni sulla Versione del Sistema

Scopo: Esplora l'hardware della piattaforma sottostante, il sistema operativo, ottiene informazioni sulla versione dell'interprete

Python non viene spesso usato come un linguaggio multipiattaforma, ma occasionalmente è necessario sapere su quale sorta di sistema un programma è in esecuzione. Strumenti di assemblaggio hanno bisogno di questa informazione, ma una applicazione potrebbe anche sapere se alcune delle librerie o comandi esterni che usa abbiano diverse interfacce in base al sistema operativo in cui risiedono. Ad esempio uno strumento per gestire la configurazione di rete di un sistema operativo potrebbe definire una rappresentazione portabile delle interfacce di rete, alias, indirizzi IP ecc. Ma quando occorre modificare file di configurazione, occorre saperne di più circa il sistema operativo ospitante in modo che possa usare i corretti comandi e file di configurazione del sistema operativo. Il modulo platform include gli strumenti per ottenere informazioni circa l'interprete, il sistema operativo e la piattaforma hardware sulla quale è in esecuzione un programma.

I risultati degli esempi sono stati generati su 2 sistemi: un PC con sistema operativo Ubuntu 18.04 e un PC con sistema operativo Windows 10. Python è stato installato su Windows usando i pacchetti precompilati a disposizione su python.org mentre il sistema Linux esegue una versione compresa nei pacchetti di sistema.

Interprete

Ci sono quattro funzioni per ottenere informazioni circa l'interprete corrente Python: python_version() e python_version_tuple() ritornano diversi formati della versione dell'interprete con le componenti maggiore, minore e livello di patch. python_compiler() riporta informazioni sul compilatore usato per assemblare l'interprete e python_build() fornisce una versione stringa dell'assemblaggio dell'interprete.

# platform_python.py

import platform

print('Versione        :', platform.python_version())
print('Versione (tuple):', platform.python_version_tuple())
print('Compilatore     :', platform.python_compiler())
print('Assemblaggio    :', platform.python_build())

Linux:

$ python3 platform_python.py

Versione        : 3.8.5
Versione (tuple): ('3', '8', '5')
Compilatore     : GCC 9.3.0
Assemblaggio    : ('default', 'Jan 27 2021 15:41:15')

Windows:

$ python3 platform_python.py

Versione        : 3.7.2rc1
Versione (tuple): ('3', '7', '2rc1')
Compilatore     : MSC v.1916 64 bit (AMD64)
Assemblaggio    : ('tags/v3.7.2rc1:75a402a217', 'Dec 11 2018 23:05:39')

Platform (Piattaforma)

La funzione platform() ritorna una stringa che contiene un identificatore per usi generici. La funzione accetta due argomenti booleani opzionali. Se aliased è True, i nomi nel valore di ritorno sono convertiti da un nome formale alla loro accezione più comune. Quanto terse è True, viene ritornato un valore minimale con alcune parti omesse invece della stringa completa.

# platform_platform.py

import platform

print('Normale:', platform.platform())
print('Aliased:', platform.platform(aliased=True))
print('Terse  :', platform.platform(terse=True))

Linux:

$ python3 platform_platform.py

Normale: Linux-5.4.0-73-generic-x86_64-with-glibc2.29
Aliased: Linux-5.4.0-73-generic-x86_64-with-glibc2.29
Terse  : Linux-5.4.0-73-generic-x86_64-with-glibc2.29

Windows:

$ python3 platform_platform.py

Normale: Windows-10-10.0.17134-SP0
Aliased: Windows-10-10.0.17134-SP0
Terse  : Windows-10

Informazioni sul Sistema Operativo e Hardware

E' possibile recuperare anche le informazioni e più dettagliate sul sistema operativo e sull'harwdare sul quale è in esecuzione l'interprete. uname() ritorna una tuple che contiene i valori di sistema, nodo, rilascio, versione, macchina e processore. E' possibile accedere ai valori individuali tramite funzioni con lo stesso nome, come da tabella seguente:

FUNZIONE VALORE RITORNATO
system() nome del sistema operativo
node() nome host del server, non qualificato interamente
release() numero di rilascio del sistema operativo
version() ulteriori dettagli sulla versione del sistema
machine() identificatore del tipo di hardware, ad esempio i386
processor() identificatore reale per il processore (lo stesso valore di machine nella maggior parte dei casi)
# platform_os_info.py

import platform

print('uname:', platform.uname())

print()
print('systema   :', platform.system())
print('nodo      :', platform.node())
print('rilascio  :', platform.release())
print('versione  :', platform.version())
print('macchina  :', platform.machine())
print('processore:', platform.processor())

Linux:

$ python3 platform_os_info.py

uname: uname_result(system='Linux', node='robby-System-Product-Name', release='5.4.0-73-generic', version='#82-Ubuntu SMP Wed Apr 14 17:39:42 UTC 2021', machine='x86_64', processor='x86_64')

systema   : Linux
nodo      : robby-System-Product-Name
rilascio  : 5.4.0-73-generic
versione  : #82-Ubuntu SMP Wed Apr 14 17:39:42 UTC 2021
macchina  : x86_64
processore: x86_64

Windows:

$ python3 platform_os_info.py

uname: uname_result(system='Windows', node='LAPTOP-QUA2RDV8', release='10', version='10.0.17134', machine='AMD64', processor='Intel64 Family 6 Model 142 Stepping 10, GenuineIntel')

systema   : Windows
nodo      : LAPTOP-QUA2RDV8
rilascio  : 10
versione  : 10.0.17134
macchina  : AMD64
processore: Intel64 Family 6 Model 142 Stepping 10, GenuineIntel

Architettura dell'Eseguibile

Le informazioni sui singoli programmi possono essere rilevate usando la funzione architecture(). Il primo argomento è il percorso di un programma eseguibile (predefinito sys.executable, l'interprete Python). Il valore di ritorno è una tupla che contiene il bit di architettura e il formato di link usato.

# platform_architecture.py

import platform

print('interprete :', platform.architecture())
print('/bin/ls    :', platform.architecture('/bin/ls'))

Linux:

$ python3 platform_architecture.py

interprete : ('64bit', 'ELF')
/bin/ls    : ('64bit', 'ELF')

Windows:

$ python3 platform_architecture.py

interprete : ('64bit', 'WindowsPE')
/bin/ls    : ('64bit', '')

Vedere anche:

platform
La documentazione della libreria standard per questo modulo
Note di portabilità per platform