如何通过“拖放”文件/文件夹到脚本图标传递路径名给Python脚本

7 投票
2 回答
4281 浏览
提问于 2025-04-17 06:35

我在使用Mac OS X,正在用Python写一些简单的文件和文件夹复制脚本。请问有没有办法把一个文件夹拖到Python脚本的图标上,然后把这个文件或文件夹的路径作为参数传给脚本呢?

目前,我有一个支持拖放的AppleScript小程序,它可以把拖放的文件和文件夹的路径传给Python。不过,我希望只用一个Python脚本,而不是同时用AppleScript和Python脚本。

任何帮助都会非常感谢。

2 个回答

1

你可能会喜欢的是Mac OS的服务功能。这些服务是Automator工作流程,可以很好地融入操作系统,具体来说就是:比如你可以让你的脚本在Finder中右键菜单里出现,当你选择一个文件夹的时候。

你可以通过以下步骤从Python脚本创建一个服务:

  1. 打开Automator.app,创建一个新的服务;
  2. 在工作流程的顶部,你需要选择你的应用程序需要什么样的输入(如果我没理解错的话,文件夹是你的选择);
  3. 从左侧面板拖动“运行Shell脚本”这个模块到工作流程中;
  4. 现在你可以使用默认的bash shell(/bin/bash)来调用你的脚本:

    /full/path/to/your/python /full/path/to/your/script.py $@
    

  5. 或者使用/usr/bin/python(默认的Python),直接把你的代码粘贴到文本框里;

  6. 别忘了在模块的右上角设置Pass input: as arguments

调试这样的工作流程有点棘手(因为你看不到标准输出和错误输出)。一个可能的调试方法是设置自定义的excepthook,把所有异常输出到一个普通的文本文件里:

import sys, traceback

def excepthook(type, exc, tb):
    with open("error.log", "a") as f:
        traceback.print_exc(file=f)

sys.excepthook = excepthook
3

只需使用“构建小程序”这个工具:

/Developer/Applications/Utilities/MacPython\ 2.5/Build\ Applet.app

然后你拖放的文件路径会通过 sys.argv 这个方式获取。

注意,你可能需要使用 Python2.5(或者一个修补过的版本)-- 可以查看这个说明: https://bitbucket.org/ronaldoussoren/py2app/issue/16/argv-emulation-code-needs-rewrite

快速示例 -- 编辑这个文件并把它放到你的桌面:

#!/usr/bin/python2.5
import sys
print sys.argv

按住控制键点击它,然后选择用“构建小程序 (2.5.4)”打开。

应用图标会出现在桌面上。

打开控制台工具并清空显示。

把一些文件拖到应用图标上 -- 你会在控制台窗口看到打印的信息。

撰写回答