在Python中获取文件关联

3 投票
2 回答
2553 浏览
提问于 2025-04-16 15:02

我想要获取与某个文件扩展名关联的程序,这个问题在Linux和Windows系统上都适用。我知道在Linux上可以用xdg-open命令,在Windows上可以用start命令来打开文件,但我想打开的是远程服务器上的媒体文件,所以这样做会打开网页浏览器,而不是默认的媒体播放器。那我该怎么才能找到某个扩展名的默认应用程序呢?

2 个回答

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路径没有用。

1

有一个程序叫做 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,或许可以使用 assocftype,这两个命令是 cmd 的一部分。

撰写回答