【问题标题】:"Open with..." a file on Windows, with a python application“打开方式...”Windows上的文件,带有python应用程序
【发布时间】:2011-11-01 03:28:29
【问题描述】:

我试图弄清楚当用户右键单击文件并选择“打开方式”时如何让 python 程序打开文件。例如,我希望用户能够右键单击文本文件并选择我的程序,以便我的程序可以处理文本文件。文本文件的名称是否以某种方式传递到我的程序中?谢谢。

【问题讨论】:

    标签: python windows


    【解决方案1】:

    我的方法是使用包含python someprogram.py %1 的重定向.bat 文件。 %1 将文件路径传递给 python 脚本,可以通过
    from sys import argv argv[1]

    访问

    【讨论】:

    • 天才 :),谢谢
    【解决方案2】:

    这种方法的问题是您的 .py 文件不是可执行文件; Windows 将文本文件作为参数传递给 .py 文件,但 .py 文件本身不会做任何事情,因为它不是可执行文件。

    您可以使用py2exe 编译您的脚本以获得实际的可执行文件,您可以在“打开方式...”屏幕中实际指定它(您甚至可以将其注册为任何 *.foo 的默认值文件)。传递的 .foo 文件的路径在您的脚本中应该是 sys.argv[1]

    【讨论】:

    • py2exe 太过分了,因为它将程序变成了一个独立的 exe,根本不需要 python,并且每次更改程序时都需要重新编译(以防你开发它)。 %python%\Scripts\ 中有 exe 包装器,它只是启动一个具有相同名称的 python 脚本。有人知道吗?
    【解决方案3】:

    首先,您需要在注册表中的 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\ClassesHKCU\Software\Classes 的联合;如果您正在写入注册表,则应选择实际键之一。您无需升级即可安装到HKEY_CURRENT_USER

    【讨论】:

    • 我会声明我没有尝试过这个,因为我不想弄乱我在这台机器上的设置。 MSDN 建议需要设置一些其他值,但快速浏览我的注册表表明它们不是必需的。如果这个最小的解决方案有效,绝对感兴趣;继续编辑我错过的任何额外内容。
    • 这根本行不通;在“打开方式”菜单中选择 .py 仍然报告它不是 win32 应用程序。
    • 我认为这可能适用于“发送至”但不适用于“打开方式”。
    • 让它工作,但“打开方式...”中的标签是“Python”,而不是我在注册表中设置的任何内容
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-05
    • 2016-06-16
    • 2011-11-01
    • 2013-07-07
    • 1970-01-01
    相关资源
    最近更新 更多