Je travaille sur quelques outils Linux et je dois empêcher l'installation sur Windows, car cela dépend de FHS et est donc rendu inutile sur cette plate-forme. Le platform.platform
la fonction se rapproche mais ne renvoie qu'une chaîne.
Malheureusement, je ne sais pas quoi rechercher dans cette chaîne pour qu'elle donne un résultat fiable. Est-ce que quelqu'un sait quoi rechercher ou quelqu'un connaît-il une autre fonction qui me manque ici?
>>> import platform
>>> platform.system()
'Windows'
Pour ceux qui sont venus ici à la recherche d'un moyen de détecter Cygwin à partir de Python (par opposition à la simple détection de Windows), voici quelques exemples de valeurs de retour de os.name
et platform.system
sur différentes plateformes
OS/build | os.name | platform.system()
-------------+---------+-----------------------
Win32 native | nt | Windows
Win32 cygwin | posix | CYGWIN_NT-5.1*
Win64 native | nt | Windows
Win64 cygwin | posix | CYGWIN_NT-6.1-WOW64*
Linux | posix | Linux
À partir de là, la distinction entre Windows natif et Cygwin devrait être évidente, bien que je ne sois pas convaincu que ce soit à l'épreuve du temps.
* les numéros de version sont pour XP et Win7 respectivement, ne vous fiez pas à eux
Sur ma boîte Windows, platform.system()
renvoie 'Windows'
.
Cependant, je ne sais pas pourquoi vous vous embêtez. Si vous voulez limiter technologiquement la plate-forme sur laquelle il fonctionne, j'utiliserais une liste blanche plutôt qu'une liste noire.
En fait, je ne le ferais pas du tout technologiquement puisque peut-être la prochaine version de Python peut avoir Win32/Win64
au lieu de Windows
(pour la liste noire) et *nix
au lieu de Linux
(pour la liste blanche).
Mon conseil est d'indiquer simplement quelles sont les exigences et, si l'utilisateur choisit de l'ignorer, c'est son problème. S'ils sonnent en disant qu'ils ont reçu un message d'erreur indiquant "Impossible de trouver FHS" et qu'ils admettent qu'ils fonctionnent sous Windows, indiquez-leur doucement que ce n'est pas une configuration prise en charge.
Peut-être que vos clients sont assez intelligents pour faire fonctionner FHS sous Windows afin que votre code fonctionne. Il est peu probable qu'ils apprécient ce qu'ils considéreraient alors comme une limitation arbitraire de votre logiciel.
C'est un problème rencontré quotidiennement par les développeurs de logiciels. Même les grandes organisations ne peuvent pas prendre en charge chaque plate-forme unique et configuration.
Essaye ça:
import platform
if platform.system() == "Darwin":
# Don't have Windows handy, but I'd expect "Win32" or "Windows" for it
Edit: Je viens de voir que vous avez essayé platform.platform()
...platform.system()
fonctionnera mieux dans ce cas. Croyez-moi, utilisez-le. Les coins sombres se trouvent dans la détection de la plate-forme.
distutils
le fera aussi, si vous le demandez gentiment.
Vous pouvez toujours faire quelque chose de mal comme os.path.exists()
sur un fichier Windows ... mais platform
est aussi fiable que dans la bibliothèque standard Python.
Edit 2: Un autre répondeur utile a souligné que platform.system()
est exactement égal à "Windows" sur sa machine Windows.
>>> import os
>>> os.name
'nt'
"Le nom du module dépendant du système d'exploitation importé. Les noms suivants sont actuellement enregistrés: 'posix', 'nt', 'mac', 'os2', 'ce', 'Java', 'riscos'." (c) http://docs.python.org/library/os.html#os.name
import os
if os.name == 'nt':
#yourcodehere
De l'aide (plateforme)
system()
Returns the system/OS name, e.g. 'Linux', 'Windows' or 'Java'.
An empty string is returned if the value cannot be determined.