【问题标题】:Is there a cross-platform way to open a file browser in Python?有没有跨平台的方式在 Python 中打开文件浏览器?
【发布时间】:2010-12-20 04:31:14
【问题描述】:

我正在考虑与webbrowser 模块类似的东西,但用于文件浏览器。在 Windows 中,我想打开资源管理器,在 Linux 上的 GNOME 中,我想在 KDE 上打开 nautilus、Konqueror 等。如果可以避免的话,我不想把它搞砸。 ;-)

【问题讨论】:

  • 既然“文件浏览器”不是跨平台功能,那么您在说什么?您是在谈论某种“跨平台”的 GUI 窗口吗?您看过哪些符合您对“跨平台”定义的 GUI 工具包?
  • @S.Lott:不是 Python 进程拥有的 GUI 窗口——在与 webbrowser 相同的意义上,向本机子进程发送壳,适合用户的操作环境。

标签: python cross-platform operating-system


【解决方案1】:

如果我可以避免的话,我宁愿不要把它弄得一团糟。

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 shell (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])

【讨论】:

  • 根据bugs.python.org/issue3177 获得全球支持会很好
  • os.startfile 和 long registry/subprocess 方法在 Windows 7 中仍然适用于我。
【解决方案2】:

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

另外,至少在 gnome 和 mac os 上,您可以执行“gnome-open http://blah”和“open http://blah”(在 mac 上);两者都将在用户的首选浏览器中打开 url。

对于 linux,还可以查看 freedesktop.org——一套涵盖 Gnome 和 KDE 的通用工具,其中应该包含类似的内容。

【讨论】:

    【解决方案3】:

    这完全是在黑暗中尝试,但请看一下wxPython,它提供了与底层wxWidgets 库的Python 绑定。自从我上次看它已经有很长时间了,但那里可能有一些你可以使用的东西。否则,制作您自己的文件浏览器应该相对容易,该浏览器将为每个操作系统使用本机“小部件”。

    请注意,wxPython 不是轻量级的,它确实会扩大您的应用程序并增加您的依赖关系。

    【讨论】:

      猜你喜欢
      • 2011-02-03
      • 1970-01-01
      • 1970-01-01
      • 2014-10-14
      • 1970-01-01
      • 2011-07-27
      • 1970-01-01
      • 1970-01-01
      • 2012-05-17
      相关资源
      最近更新 更多