用Python应用程序在Windows上打开文件的“打开方式...”
我想知道怎么让一个Python程序在用户右键点击文件并选择“用...打开”时打开这个文件。比如说,我希望用户能够右键点击一个文本文件,然后选择我的程序,这样我的程序就可以处理这个文本文件。请问文本文件的名字会以某种方式传递给我的程序吗?谢谢。
4 个回答
首先,你需要在注册表中注册你的脚本,让它能在Python下运行,并且要有一个ProgId。至少,你需要定义open这个操作:
HKEY_CURRENT_USER\Software\Classes\MyApp.ext\
(Default) = "Friendly Name"
DefaultIcon\
(Default) = "path to .ico file"
shell\
open\
command\
(Default) = 'path\python.exe "path\to\your\script.py" "%L"'
如果你想让它在整个机器上都能用,可以把HKEY_LOCAL_MACHINE
替换掉。还有一些版本控制的规则,你可以大可不必去管。关于文件类型的详细信息,可以参考MSDN的文件类型部分。
第二步是把你的ProgId添加到你想要显示在列表中的扩展名的OpenWithProdIds键里:
HKEY_CURRENT_USER\Software\Classes\.ext\OpenWithProgIds
MyApp.ext = None
这个键的值其实不重要,只要名字和你的ProgId完全一致就行。
*需要注意的是,HKEY_CLASSES_ROOT
其实是一个虚假的键,它“包含”了HKLM\Software\Classes
和HKCU\Software\Classes
的内容;如果你要写入注册表,应该选择这两个实际的键中的一个。你在HKEY_CURRENT_USER
中安装时不需要提升权限。
这个方法的问题在于,你的 .py 文件并不是一个可执行文件;Windows 会把文本文件当作参数传给 .py 文件,但 .py 文件本身不会做任何事情,因为它不是一个可执行文件。
你可以使用 py2exe 来把你的脚本编译成一个真正的可执行文件,这样你就可以在“打开方式...”的界面中指定它(你甚至可以把它注册为任何 *.foo 文件的默认打开方式)。在你的脚本中,传递的 .foo 文件的路径应该是 sys.argv[1]
。
我的方法是使用一个重定向的 .bat 文件,里面包含 python someprogram.py %1
这行代码。这里的 %1
是用来把文件路径传递给 Python 脚本的,脚本可以通过以下方式来访问这个路径:
from sys import argv
argv[1]