2009-11-25 141 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的工具,這應該包括類似的東西。

相關問題