我在考虑类似于webbrowser模块的功能,但是针对文件浏览器。在Windows中,我想要打开资源管理器,在Linux的GNOME下,我想要打开nautilus,在KDE下则是Konqueror等等。如果可能的话,我希望不要使用临时解决方案。
我在考虑类似于webbrowser模块的功能,但是针对文件浏览器。在Windows中,我想要打开资源管理器,在Linux的GNOME下,我想要打开nautilus,在KDE下则是Konqueror等等。如果可能的话,我希望不要使用临时解决方案。
如果可以避免的话,我希望不要把它弄得太复杂。
嗯,我认为你需要一些平台探测方面的小技巧,但希望不会像可怕的命令探测模块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
cmd /c ...
)存在基本问题,即您无法嵌套双引号,也无法^-转义引号或空格。我尚未找到任何方法可以在命令行中引用并运行cmd /c start C:\Documents and Settings
。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])
os.startfile
和冗长的注册表/subprocess
方法仍然对我有效。 - bobince我刚看到了一个类似问题的帖子Choosing a file in Python with simple Dialog。我建议去那里查看示例和代码片段。基本上有两个建议:
我会先尝试tkinter,如果失败再尝试其中一种替代方案。
由于这个帖子非常老,值得分享一些可能更近期出现的新替代方案,供其他人寻找答案时参考。
我不知道是否存在一个现成的模块,但如果有的话,应该在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,应该包括类似的内容。
webbrowser
相同的方式向本地子进程外壳,适合用户的操作环境。 - cdleary