【发布时间】:2011-11-01 03:28:29
【问题描述】:
我试图弄清楚当用户右键单击文件并选择“打开方式”时如何让 python 程序打开文件。例如,我希望用户能够右键单击文本文件并选择我的程序,以便我的程序可以处理文本文件。文本文件的名称是否以某种方式传递到我的程序中?谢谢。
【问题讨论】:
我试图弄清楚当用户右键单击文件并选择“打开方式”时如何让 python 程序打开文件。例如,我希望用户能够右键单击文本文件并选择我的程序,以便我的程序可以处理文本文件。文本文件的名称是否以某种方式传递到我的程序中?谢谢。
【问题讨论】:
我的方法是使用包含python someprogram.py %1 的重定向.bat 文件。 %1 将文件路径传递给 python 脚本,可以通过from sys import argv
argv[1]
【讨论】:
这种方法的问题是您的 .py 文件不是可执行文件; Windows 将将文本文件作为参数传递给 .py 文件,但 .py 文件本身不会做任何事情,因为它不是可执行文件。
您可以使用py2exe 编译您的脚本以获得实际的可执行文件,您可以在“打开方式...”屏幕中实际指定它(您甚至可以将其注册为任何 *.foo 的默认值文件)。传递的 .foo 文件的路径在您的脚本中应该是 sys.argv[1]。
【讨论】:
首先,您需要在注册表中的 ProgId 下注册您的脚本以使用 Python 运行。至少,您需要定义 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。* 还有一些版本控制约定您可能会忽略。 File Types 上的 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。
【讨论】: