如何通过“拖放”文件/文件夹到脚本图标传递路径名给Python脚本
我在使用Mac OS X,正在用Python写一些简单的文件和文件夹复制脚本。请问有没有办法把一个文件夹拖到Python脚本的图标上,然后把这个文件或文件夹的路径作为参数传给脚本呢?
目前,我有一个支持拖放的AppleScript小程序,它可以把拖放的文件和文件夹的路径传给Python。不过,我希望只用一个Python脚本,而不是同时用AppleScript和Python脚本。
任何帮助都会非常感谢。
2 个回答
你可能会喜欢的是Mac OS的服务功能。这些服务是Automator工作流程,可以很好地融入操作系统,具体来说就是:比如你可以让你的脚本在Finder中右键菜单里出现,当你选择一个文件夹的时候。
你可以通过以下步骤从Python脚本创建一个服务:
- 打开Automator.app,创建一个新的服务;
- 在工作流程的顶部,你需要选择你的应用程序需要什么样的输入(如果我没理解错的话,文件夹是你的选择);
- 从左侧面板拖动“运行Shell脚本”这个模块到工作流程中;
现在你可以使用默认的bash shell(
/bin/bash
)来调用你的脚本:/full/path/to/your/python /full/path/to/your/script.py $@
或者使用
/usr/bin/python
(默认的Python),直接把你的代码粘贴到文本框里;- 别忘了在模块的右上角设置
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
只需使用“构建小程序”这个工具:
/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)”打开。
应用图标会出现在桌面上。
打开控制台工具并清空显示。
把一些文件拖到应用图标上 -- 你会在控制台窗口看到打印的信息。