2009-11-25 89 views
12

我正在考虑沿webbrowser模块的方向,但是对于文件浏览器。在Windows中,我想打开资源管理器,在Linux上的GNOME上打开nautilus,在KDE上打开Konqueror等等。如果我可以避免它,我宁愿不要把它弄糟。 ;-)是否有跨平台的方式来打开Python中的文件浏览器?

+0

自从“文件浏览器“不是一个跨平台的功能,具体是什么 - 你在说什么?你在谈论某种“跨平台”的GUI窗口吗?你看过哪些GUI工具包,符合你的“跨平台”定义? – 2009-11-25 11:46:44

+0

@ S.Lott:不是一个Python进程拥有的GUI窗口 - 就像webbrowser那样,适合用户的操作环境,这个窗口就是一个本地子进程。 – cdleary 2009-11-25 21:27:26

回答

16

我宁愿不杂牌它,如果我能避免它。

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 ...)一个基本问题,即不能嵌套双引号,你不能^ -escape引号或空格。我还没有设法找到任何方法从命令行引用并运行cmd /c start C:\Documents and Settings

ETA重新nosklo的评论:仅在Windows上,有一个内置的方式做到这一点:

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

这里是不是非常不错的替代解决方案找到外壳并打开一个文件夹,它,你不应该现在需要的,但我会离开(部分原因是它可能是用别的东西的,但主要是因为我花了键入该死的东西的时候了!)

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]) 
+4

...或使用os.startfile() – nosklo 2009-11-25 10:17:58

+0

哦,是的,这太好了! – bobince 2009-11-25 10:29:44

+1

根据http://bugs.python.org/issue3177 – bobince 2009-11-25 10:43:19

-1

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

提个醒,wxPython的是重量不轻,它真的会增强自己的应用程序,并增加你的依赖。

-1

我不知道是否准备使用的模块存在,但如果有,应该是在ActiveState的蟒蛇cookbok(http://code.activestate.com/recipes/langs/python/

此外,至少在GNOME和Mac OS上,你可以执行“gnome-open http://blah”和“打开http://blah”(在mac上);两者都会在用户首选的浏览器中打开网址。

对于Linux还检查freedesktop.org - 一套共同的涵盖Gnome和KDE的工具,这应该包括类似的东西。

相关问题