Come posso controllare il sistema operativo in Python?


148

Voglio controllare il sistema operativo (sul computer su cui viene eseguito lo script).

So che posso usare os.system('uname -o')in Linux, ma mi dà un messaggio nella console e voglio scrivere su una variabile.

Andrà bene se lo script può dire se è Mac, Windows o Linux. Come posso controllarlo?



Risposte:


287

Puoi usare sys.platform:

from sys import platform
if platform == "linux" or platform == "linux2":
    # linux
elif platform == "darwin":
    # OS X
elif platform == "win32":
    # Windows...

sys.platformha una granularità più fine di sys.name.

Per i valori validi, consultare la documentazione .

Vedi anche la risposta a "Su quale sistema operativo sono in esecuzione?"


8
Si noti che in Cygwin, restituisce "cygwin"non "win32"come qualcuno potrebbe aspettare.
Michał Bentkowski il

21
Grazie. Qual è la differenza tra linux e linux2?
Tharindu Rusira,

1
quale sarebbe l'output per BSD?
Galois,

1
Si noti che da Python 3.3 "linux2"non è più possibile un valore di platform(consultare i documenti collegati per la conferma) e quindi se è necessario supportare Python 3.3 e versioni successive è possibile eliminare in modo sicuro la clausola `or platform ==" linux2 "` dalla prima condizione.
Mark Amery il

23

Se vuoi sapere su quale piattaforma sei su "Linux", "Windows" o "Darwin" (Mac), senza più precisione, dovresti usare:

>>> import platform
>>> platform.system()
'Linux'  # or 'Windows'/'Darwin'

La platform.systemfunzione utilizza unameinternamente.


1
Mi piace questa soluzione, ma voglio sottolineare che dalla documentazione si afferma che restituisca Linux, Windows, Javao una stringa vuota. devdocs.io/python~3.7/library/platform#platform.system
Brandon Benefield

2
@BrandonBenefield, l'enumerazione è un esempio di possibili valori. Sui dispositivi Apple, restituisce "Darwin".
Laurent LAPORTE,

15

Puoi avere un'idea piuttosto approssimativa del sistema operativo che stai utilizzando controllando sys.platform.

Una volta che hai queste informazioni puoi usarle per determinare se chiamare qualcosa di simile os.uname()è appropriato per raccogliere informazioni più specifiche. Puoi anche usare qualcosa come Python System Information su sistemi operativi unix-like o pywin32 per Windows.

C'è anche psutil se vuoi fare un'ispezione più approfondita senza preoccuparti del sistema operativo.


6

Informazioni più dettagliate sono disponibili nel platformmodulo .


Il platformmodulo ha qualche vantaggio rispetto sys.platform? Quando dovrei usare quale approccio?
matth,

@matth: ottieni informazioni più dettagliate e strutturate dal platformmodulo. Basta fare clic sul collegamento per la documentazione.
Sven Marnach,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.