texto - ¿Hay alguna forma de plataforma cruzada para abrir un buscador de archivos en Python?
python como abrir un archivo (3)
Estoy pensando en algo parecido al módulo webbrowser , pero para navegadores de archivos. En Windows, me gustaría abrir el explorador, en GNOME en Linux, quiero abrir Nautilus, Konqueror en KDE, etc. Prefiero no criticarlo si puedo evitarlo. ;-)
Preferiría no arriesgarme si puedo evitarlo.
Weeell, creo que vas a necesitar un poco de kludge para olfatear plataformas, pero ojalá no tanto como el espantoso módulo webbrowser
olfatear órdenes. Aquí hay una primera puñalada:
if sys.platform==''win32'':
subprocess.Popen([''start'', d], shell= True)
elif sys.platform==''darwin'':
subprocess.Popen([''open'', d])
else:
try:
subprocess.Popen([''xdg-open'', d])
except OSError:
# er, think of something else to try
# xdg-open *should* be supported by recent Gnome, KDE, Xfce
Tenga en cuenta que la versión de win32 no incluirá espacios en los nombres de archivo. El error 2304 podría tener algo que ver con eso, pero parece haber un problema básico con el escape de parámetros y el shell de Windows ( cmd /c ...
), en el sentido de que no se pueden anidar comillas dobles y no se puede ^ -escape quotes o espacios. No he logrado encontrar ninguna forma de presupuestar y ejecutar cmd /c start C:/Documents and Settings
desde la línea de comando.
Comentario de ETA re nosklo: solo en Windows, hay una forma incorporada de hacerlo:
if sys.platform==''win32'':
os.startfile(d)
Esta es la solución alternativa no muy agradable para encontrar el caparazón y abrir una carpeta con él, que ahora no debería necesitar, pero lo dejaré. (En parte porque podría ser útil para otra cosa, pero principalmente porque ¡Pasé el tiempo para escribir la maldita cosa!)
if sys.platform==''win32'':
import _winreg
path= r''SOFTWARE/Microsoft/Windows NT/CurrentVersion/Winlogon'')
for root in (_winreg.HKEY_CURRENT_USER, _winreg.HKEY_LOCAL_MACHINE):
try:
with _winreg.OpenKey(root, path) as k:
value, regtype= _winreg.QueryValueEx(k, ''Shell'')
except WindowsError:
pass
else:
if regtype in (_winreg.REG_SZ, _winreg.REG_EXPAND_SZ):
shell= value
break
else:
shell= ''Explorer.exe''
subprocess.Popen([shell, d])
Esta es una puñalada completa en la oscuridad, pero eche un vistazo a wxPython que proporciona enlaces de Python a la biblioteca wxWidgets subyacente. Ha pasado mucho tiempo desde la última vez que lo miré, pero podría haber algo allí que puedas usar. De lo contrario, debería ser relativamente fácil crear su propio explorador de archivos que usará los "widgets" nativos para cada sistema operativo.
Eso sí, wxPython no es liviano, realmente aumentará su aplicación y aumentará sus dependencias.
No sé si existe un módulo listo para usar, pero si lo hay, debe estar en el cooktop python de Activestate ( http://code.activestate.com/recipes/langs/python/ )
Además, al menos en gnome y en mac os, puede ejecutar "gnome-open http: // blah " y "abrir http: // blah " (en mac); ambos abrirán la url en el navegador preferido del usuario.
Para Linux, también consulte freedesktop.org, un conjunto común de herramientas que cubre tanto Gnome como KDE, que debería incluir algo similar.