在Python中获取文件关联
我想要获取与某个文件扩展名关联的程序,这个问题在Linux和Windows系统上都适用。我知道在Linux上可以用xdg-open命令,在Windows上可以用start命令来打开文件,但我想打开的是远程服务器上的媒体文件,所以这样做会打开网页浏览器,而不是默认的媒体播放器。那我该怎么才能找到某个扩展名的默认应用程序呢?
2 个回答
下面只讲Windows系统:
我觉得这和我刚刚处理的.doc文件(和winword.exe关联)差不多。
在我的电脑上……
步骤1:先看看注册表的一个键值:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.doc
在 Windows XP 上
步骤2:查看默认值(其他的可以不管)。我看到的默认值是 Word.Document.8
步骤3:现在用这个值,插入它(注意下面的键名),来读取默认值
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Word.Document.8\shell\Open\command
这个值是: "\"C:\Program Files\Microsoft Office XP Pro 2003\OFFICE11\WINWORD.EXE\" /n /dde"
这就是我系统上MS Word的路径,至少在XP上是这样。
我还注意到,Mikel上面提到的建议在XP上是准确的:
C:\>assoc .doc
.doc=Word.Document.8
C:\>ftype Word.Document.8
Word.Document.8="C:\Program Files\Microsoft Office XP Pro 2003\OFFICE11\WINWORD.EXE" /n /dde
在 Windows 7 上
步骤1的默认值没有设置,真是麻烦,这下简单的事情变复杂了。 有一个叫'OpenWithProgIDs'的子键,所以如果默认值为空或者根据操作系统版本,你可以去找这个。
步骤2:查看名为'OpenWithProgIDs'的子键。
里面有一个项叫 Word.Document.8
,所以我们又回到了这个。
步骤3:再次插入这个值,来读取默认值
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Word.Document.8\shell\Open\command
在我的情况下,这个值更复杂:
"C:\Program Files (x86)\Common Files\microsoft shared\virtualization handler\cvh.exe" "Microsoft Word Starter 2010 9014006604090000" /n "%1"
在使用注册表方面,还是在正确的方向上。
不幸的是,在Windows 7上,'assoc'和'ftype'对.doc文件和我机器上的winword.exe路径没有用。
有一个程序叫做 xdg-mime,它的功能类似于 xdg-open,但它是用来显示信息的,而不是直接打开文件。
xdg-mime query filetype /tmp/foobar.png
它会打印出文件 /tmp/foobar.png 的 MIME 类型,在这个例子中是 image/png。
xdg-mime query default image/png
它会打印出注册用来打开 PNG 文件的应用程序的 .desktop 文件名。
在 Windows 系统上,如果你找不到相关的 API,或许可以使用 assoc
或 ftype
,这两个命令是 cmd
的一部分。