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''