python - snake - ¿Existe una plataforma independiente equivalente de os.startfile()?
python snake (3)
Quiero ejecutar un programa en varias plataformas (incluido Mac OS), así que trato de mantenerlo lo más independiente posible de la plataforma. Yo uso Windows yo mismo, y tengo una línea os.startfile(file)
. Eso funciona para mí, pero no en otras plataformas (leí la documentación, no lo he probado por mí mismo).
¿Hay algún equivalente que funcione para todas las plataformas?
Por cierto, el archivo es un archivo .wav
, pero quiero que los usuarios puedan usar su reproductor multimedia estándar, para que puedan pausar / rebobinar el archivo. Es por eso que uso os.startfile()
. Es posible que pueda trabajar con bibliotecas que también permiten reproducir / pausar / rebobinar archivos multimedia.
Depende de lo que quieras decir con plataforma independiente. Si su pregunta es sobre cómo abrir cualquier cosa mediante la acción predeterminada del sistema operativo, por ejemplo, cuando hace doble clic en algún archivo para permitir que el sistema operativo decida cómo abrirlo, la respuesta simple es no .
Sin embargo, implementar esta funcionalidad usted mismo es muy fácil, pero necesita usar algunos métodos diferentes para adaptarse a los diferentes sistemas operativos. Dicho esto, el método más indulgente es usar os.system(WinPathWithArgs)
como lo expliqué en esta respuesta .
Parece que todavía no existe un módulo de apertura de archivos multiplataforma, pero puede confiar en la infraestructura existente de los sistemas populares. Este fragmento de código cubre sistemas similares a Windows, MacOS y Unix (Linux, FreeBSD, Solaris ...):
import os, sys, subprocess
def open_file(filename):
if sys.platform == "win32":
os.startfile(filename)
else:
opener ="open" if sys.platform == "darwin" else "xdg-open"
subprocess.call([opener, filename])
Solo usa webbrowser.open(filename)
. puede llamar a os.startfile()
, open
, xdg-open
cuando sea apropiado.
Cuidado, hay un texto aterrador en los documentos :
Tenga en cuenta que en algunas plataformas, al intentar abrir un nombre de archivo utilizando esta función, puede funcionar e iniciar el programa asociado del sistema operativo. Sin embargo, esto no es compatible ni portátil.
Funciona bien para mí. Pruébalo en tu entorno.
Mire el código fuente de webbrower
para ver cuánto trabajo debe hacerse para ser portátil.
También hay un problema abierto en el rastreador de errores de Python - Agregar shutil.open . La interfaz "portable os.startfile ()" resultó ser más compleja de lo esperado. Puede probar los parches enviados, por ejemplo, shutil.launch()
.