【问题标题】:Drag and drop onto Python script in Windows Explorer在 Windows 资源管理器中拖放到 Python 脚本
【发布时间】:2010-09-13 15:48:32
【问题描述】:

我想将我的数据文件拖放到 Python 脚本上,让它处理文件并生成输出。 Python 脚本接受数据文件的名称作为命令行参数,但 Windows 资源管理器不允许该脚本成为放置目标。

对于这项工作,是否需要在某处进行某种配置?

【问题讨论】:

  • 我认为如果你从 Windows 安装程序安装 python 就可以工作(基本上如果你可以双击运行 python 脚本)
  • 在 Windows 10 上,我必须双击 PY 文件并使用 Python 打开一次才能识别放置处理程序。

标签: python windows drag-and-drop windows-explorer


【解决方案1】:

当然。从mindless technology article called "Make Python Scripts Droppable in Windows",您可以通过添加注册表项来添加删除处理程序:

这是一个您可以用来执行此操作的注册表导入文件。复制 进入 .reg 文件并运行它 (确保您的 .py 扩展名 映射到 Python.File)。

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Python.File\shellex\DropHandler]
@="{60254CA5-953B-11CF-8C96-00AA00B8708C}"

这使得 Python 脚本使用与长文件名兼容的 WSH 删除处理程序。要使用短文件名处理程序,请将 GUID 替换为 86C86720-42A0-1069-A2E8-08002B30309D

该帖子中的一条评论表明,可以使用Python.NoConFilePython.CompiledFile 类启用删除“无控制台 Python 文件 (.pyw)”或“已编译的 Python 文件 (.pyc)”。

【讨论】:

  • 你把文件放在哪里?进入控制台窗口?还是放到脚本文件图标上?我没有关注。
  • 感谢@Blair 的解决方案。我是初学者,我在删除后收到错误 No such file or directory。您可以通过在脚本开头添加以下内容来解决此问题:exepath = sys.argv[0] if '\\' in exepath: os.chdir(exepath[:exepath.rfind('\\')])
  • 此信息已过时。 WSH 删除处理程序在 2.6.1 (2008-12) 中添加到 Python 的安装程序中。但是,为 3.6.0 (2016-12) 和 3.5.3 (2017-01) 创建了一个新的删除处理程序,因为 WSH 处理程序不支持 Unicode 路径。只要 .py 文件与Python.File progid 相关联,这应该只适用于 Windows 当前支持的所有 CPython 版本。但是最好安装 3.5.3+ 来获取新的 drop handler。
  • @eryksun 你能把这个信息添加到halanson's answer吗?
  • 谁能澄清“确保您的 .py 扩展名映射到 Python.File”是什么意思?我将 .py 文件设置为默认使用 python.exe 打开,但是这个 reg 脚本不允许我拖放它们。
【解决方案2】:

编写一个简单的 shell 脚本 (file.bat)

"C:\python27\python.exe" yourprogram.py %*

其中%* 代表您传递给脚本的所有参数。

现在将您的目标文件拖放到file.bat 图标上。

【讨论】:

  • 如何在 Python 中访问参数列表?
  • 您可以通过for arg in sys.argv[1:]: print(arg)访问每个参数
  • 似乎文件是随机顺序的。有什么方法可以保留它们被选中的顺序?
  • @Gillespie Windows 未正确保留选择项目的顺序:例如,当我将 .mp3 文件拖放到 VLC 中时,我选择的最后一个项目将是播放列表中的第一个.
【解决方案3】:

使用已安装的 python - 至少 2.6.1 - 您可以将任何文件拖放到 python 脚本上。

import sys
droppedFile = sys.argv[1]
print droppedFile

sys.argv[0] 是脚本本身。 sys.argv[n+1] 是您删除的文件。

【讨论】:

  • 这个答案是最简单最容易的。此外,在转换为 exe 后,经过测试可与 py2exe(使用 Python 3.3)一起使用。
  • 这可行,但与其他解决方案一样,文件似乎是随机顺序的。有什么方法可以保留它们被选中的顺序?
  • @Gillespie 不是真的。尝试单击并拖放选择中的第一个文件,而不是中间选择中的某个文件。根据您的用例,您还可以使用内部排序算法。
【解决方案4】:

尝试使用 py2exe。使用 py2exe 将您的 python 脚本转换为 Windows 可执行文件。然后,您应该能够将输入文件拖放到 Windows 资源管理器中的脚本中。您还应该能够在桌面上创建快捷方式并将输入文件拖放到上面。如果您的 python 脚本可以获取文件列表,您应该能够在脚本(或快捷方式)上拖放多个文件。

【讨论】:

    【解决方案5】:

    创建文件的快捷方式。如果默认情况下没有 python 打开 .py 文件,请进入快捷方式的属性并编辑快捷方式的目标以包含您正在使用的 python 版本。例如:

    目标:C:\Python26\python.exe

    我发布此内容是因为我不想编辑注册表并且 .bat 解决方法对我不起作用。

    【讨论】:

      【解决方案6】:

      1)。创建.py的快捷方式
      2)。右键 -> 属性
      3)。将“目标:”与“python”作为前缀,因此它将 .py 作为参数运行到 python 命令中

      1)。创建一个 .bat
      2)。 python some.py %*

      这些快捷方式版本对我来说是最简单的我正在做的事情
      否则我会将其转换为 .exe,但宁愿只使用 java 或 c/c++

      【讨论】:

        【解决方案7】:

        迟到的答案,但此页面上的所有答案都不适合我。
        我设法使用以下方法启用/修复拖放到.py 脚本:

        1. HKEY_CLASSES_ROOT\.py -> 将默认值设置为Python.File

        2. HKEY_CLASSES_ROOT\Python.File\Shell\Open -> 创建一个名为Command 的密钥,默认值为"C:\Windows\py.exe" "%1" %*

        3. CLASSES_ROOT\Applications\py.exe\open\command -> 如果不存在则创建密钥并将默认值设置为"C:\Windows\py.exe" "%1" %*

        4. CLASSES_ROOT\Python.File\ShellEx -> 创建密钥DropHandler,默认值为{86C86720-42A0-1069-A2E8-08002B30309D}

        就是这样。通过将文件拖到 python 脚本上来测试它:

        import sys
        
        args = sys.argv
        print(args)
        

        【讨论】:

        • 这对我有用,虽然记得终止 explorer.exe 并重新启动它。此外,不确定它是否正常,但它最终以截断的文件名结束,如 829897~1.JSO 而不是真正的82989762511648_11612593811973.json,但尝试打开路径按预期工作。
        • 找到了我自己的问题的解决方案,而不是第 4 步中建议的 {86C...,而是使用 {60254CA5-953B-11CF-8C96-00AA00B8708C} 来获得更好的 DropHandler 支持 long名字。
        【解决方案8】:

        对于那些在.py脚本中使用argv但仍然无法拖动文件执行的人, 这可以通过简单地使用 Python Launcher(带有火箭图标)来解决

        脚本属性“打开文件”设置为 python.exe, 它不知道脚本需要命令行参数“%*”

        参考:https://bugs.python.org/issue40253

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-03
          相关资源
          最近更新 更多