在Python中有没有跨平台的方法打开文件浏览器?
我在想,能不能做一个类似于webbrowser模块的东西,不过是用来打开文件浏览器的。在Windows上,我想打开资源管理器;在Linux的GNOME环境下,我想打开nautilus;在KDE环境下,我想打开Konqueror等等。如果能避免一些麻烦的做法就更好了。;-)
4 个回答
1
我刚看到一个帖子,里面有类似的问题,链接是在Python中使用简单对话框选择文件。我建议你去看看,里面有很多示例和代码片段。基本上,提供了两个建议:
我建议先试试tkinter,如果不行再考虑其他选项。
因为这个讨论已经很久了,可能值得分享一些最近出现的新选择,帮助其他人找到同样问题的答案。
23
如果可以的话,我不想搞得太复杂。
嗯,我觉得你可能需要一些简单的检测平台的代码,但希望不需要像那个可怕的命令检测的 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
。
关于 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])