views:

226

answers:

5

I'm thinking something along the lines of the webbrowser module, but for file browsers. In Windows I'd like to open explorer, in GNOME on Linux I want to open nautilus, Konqueror on KDE, etc. I'd prefer not to kludge it up if I can avoid it. ;-)

A: 

This is a complete stab in the dark, but take a look at wxPython which provides Python bindings to the underlying wxWidgets library. It has been a long time since I last looked at it, but there might be something there that you can use. Otherwise, it should be relatively easy to make your own file browser that will use the native "widgets" for each OS.

Mind you, wxPython is not light weight, it will really bulk up your application and increase your dependencies.

mhawke
A: 

I don't know if a ready-to-use module exists, but if there is, it should be on the Activestate's python cookbok (http://code.activestate.com/recipes/langs/python/)

Also, at least in gnome and on mac os, you can execute "gnome-open http://blah" and "open http://blah" (on mac); both will open the url in user's preferred browser.

For linux also check freedesktop.org -- a common set of tools covering both Gnome and KDE, that should include something similar.

anonymous
+5  A: 

I'd prefer not to kludge it up if I can avoid it.

Weeell I think you are going to need a little bit of platform-sniffing kludge, but hopefully not as much as the ghastly command-sniffing webbrowser module. Here's a first stab at it:

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

Note the win32 version will currently fail for spaces in filenames. Bug 2304 might be something to do with that, but there does seem to be a basic problem with parameter escaping and the Windows shell (cmd /c ...), in that you can't nest double-quotes and you can't ^-escape quotes or spaces. I haven't managed to find any way to quote and run cmd /c start C:\Documents and Settings from the command line at all.

ETA re nosklo's comment: on Windows only, there is a built-in way to do it:

if sys.platform=='win32':
    os.startfile(d)

Here's the not-very-nice alternative solution to find the shell and open a folder with it, which you shouldn't now need, but I'll leave in. (Partly because it might be of use for something else, but mostly because I spent the time to type the damned thing!)

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])
bobince
... or use os.startfile()
nosklo
Oh yes, that's much better!
bobince
It would be nice to have this globally supported, as per http://bugs.python.org/issue3177
bobince
Mridang Agarwalla
Both `os.startfile` and the long registry/`subprocess` method still work for me in Windows 7.
bobince
+1  A: 

You can do this with the Tkinter library built into Python. Try the following:

import Tkinter
from tkFileDialog import askopenfilename
root = Tkinter.Tk()
root.withdraw() # hide the main GUI window for our example
filename = askopenfilename()

If the user doesn't pick a file, the filename variable will be None; otherwise it will contain the file path + name.

See more about tkFileDialog here.

Brandon Corfman
A: 

Hi Guys, I am very naive when it come to this. To give you some insight, i'm not even sure how the code suggestions would be implemented in the slightest... I am however looking for a file browser program just like Windows explorer.exe that can be used on Windows XP, Vista and 7. If there is a version of explorer.exe that works in all 3 platforms that would be best, but if there is something else I could use that would be ok too. Can anyone point me in the right direction in this regard.

Thanks in advance!!

Hello and welcome to Stack Overflow. You should delete this and post it as a new question, not as an answer to this unrelated question. People are more likely to find it and answer it if you open a new question. For more information, read the FAQ: http://stackoverflow.com/faq
ptomato