代码之家  ›  专栏  ›  技术社区  ›  cdleary

有没有一种跨平台的方式来在python中打开文件浏览器?

  •  12
  • cdleary  · 技术社区  · 15 年前

    我在想 webbrowser 模块,但用于文件浏览器。在Windows中,我想打开Explorer,在Linux上的GNOME中,我想打开Nautilus、KDE上的Konquerror等,如果我能避免的话,我宁愿不把它拼凑起来。;-)

    3 回复  |  直到 14 年前
        1
  •  16
  •   bobince    15 年前

    如果我能避免的话,我宁愿不把它拼凑起来。

    Weeell我认为你需要一点平台嗅探技巧,但希望不会像可怕的命令嗅探那么多。 webbrowser 模块。这是第一次尝试:

    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
    

    注意:对于文件名中的空格,Win32版本当前将失败。 Bug 2304 可能与此有关,但似乎确实存在参数转义和Windows外壳的基本问题。( cmd /c ... ,因为不能嵌套双引号,也不能^-转义引号或空格。我还没找到报价和运行的方法 cmd /c start C:\Documents and Settings 从命令行开始。

    eta re nosklo的评论:仅在Windows上,有一种内置的方式:

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

    这里有一个不太好的替代解决方案,可以找到shell并用它打开一个文件夹,这是你现在不需要的,但我会离开的。(部分原因是它可能对其他东西有用,但主要是因为我花时间打了该死的东西!)

    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])
    
        2
  •  -1
  •   mhawke    15 年前

    这是一次彻头彻尾的暗杀,但请看一下 wxPython 它提供底层的python绑定 wxWidgets 图书馆。我上次看它已经很久了,但是那里可能有一些东西你可以使用。否则,制作自己的文件浏览器相对比较容易,它将为每个操作系统使用本机的“小部件”。

    请注意,wxpython并不是轻量级的,它将真正增加您的应用程序的容量并增加您的依赖性。

        3
  •  -1
  •   anonymous    15 年前

    我不知道是否存在现成的模块,但是如果存在,它应该在ActiveState的python cookbokbok上( http://code.activestate.com/recipes/langs/python/ )

    另外,至少在gnome和mac操作系统中,您可以执行“gnome open” http://blah “和”打开 网址:http://blah (在Mac上);两者都将在用户首选的浏览器中打开URL。

    对于Linux,还可以检查freedesktop.org——一组通用的工具,涵盖gnome和kde,其中应该包含类似的内容。