xticks barplot python windows platform-detection

python - barplot - pandas plot



Detecta de manera confiable Windows en Python (6)

Estoy trabajando en un par de herramientas de Linux y necesito evitar la instalación en Windows, ya que depende de FHS y se vuelve inútil en esa plataforma. La función platform.platform se acerca pero solo devuelve una cadena.

Lamentablemente, no sé qué buscar en esa cadena para obtener un resultado confiable. ¿Alguien sabe qué buscar o alguien sabe de otra función que me falta aquí?


De ayuda (plataforma)

system() Returns the system/OS name, e.g. ''Linux'', ''Windows'' or ''Java''. An empty string is returned if the value cannot be determined.


En mi cuadro de Windows, platform.system() devuelve ''Windows'' .

Sin embargo, no estoy seguro de por qué te molestarías. Si desea limitar la plataforma en la que se ejecuta tecnológicamente, usaría una lista blanca en lugar de una lista negra.

De hecho, no lo haría tecnológicamente en absoluto ya que tal vez la próxima versión de Python pueda tener Win32/Win64 lugar de Windows (para el listado negro) y *nix lugar de Linux (para el listado en blanco).

Mi consejo es simplemente indicar cuáles son los requisitos y, si el usuario elige ignorar eso, ese es su problema. Si llaman diciendo que recibieron un mensaje de error que dice "No se puede encontrar FHS" y admiten que se están ejecutando en Windows, indíquenles que no es una configuración compatible.

Quizás sus clientes sean lo suficientemente inteligentes como para ejecutar FHS en Windows para que su código funcione. Es poco probable que aprecien lo que considerarían una limitación arbitraria de su software.

Este es un problema que enfrentan los desarrolladores de software todos los días. Incluso las grandes organizaciones no pueden admitir todas las plataformas y configuraciones que existen.


Para aquellos que vinieron aquí buscando una forma de detectar Cygwin de Python (en lugar de simplemente detectar Windows), aquí hay algunos valores de retorno de ejemplo de os.name y platform.system en diferentes plataformas

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

A partir de este punto, cómo distinguir entre Windows nativo y Cygwin debería ser obvio, aunque no estoy convencido de que esto sea una prueba de futuro.

* los números de versión son para XP y Win7 respectivamente, no confíe en ellos


Prueba esto:

import platform if platform.system() == "Darwin": # Don''t have Windows handy, but I''d expect "Win32" or "Windows" for it

Editar: Acabo de ver que probaste platform.platform() ... platform.system() funcionará mejor para este caso. Confía en mí, úsala. Las esquinas oscuras se encuentran en la detección de la plataforma.

distutils hará esto también, si lo preguntas bien.

Siempre puedes hacer algo malo como os.path.exists() en un archivo de Windows ... pero la platform es tan confiable como en la biblioteca estándar de Python.

Edición 2: Otro usuario útil señaló platform.system() es exactamente igual a "Windows" en su máquina con Windows.


>>> import os >>> os.name ''nt''

"El nombre del módulo dependiente del sistema operativo importado. Los siguientes nombres han sido registrados actualmente: ''posix'', ''nt'', ''mac'', ''os2'', ''ce'', ''java'', ''riscos''." (c) http://docs.python.org/library/os.html#os.name

import os if os.name == ''nt'': #yourcodehere


>>> import platform >>> platform.system() ''Windows''