在Mac上使用 Automator 和 Python 定制服务

1. 前言

由于我经常会制作一些资源压缩包,在这个资源压缩包里会有一个引流用的二维码

之前手工的时候,一次就要花费5-10 分钟,特别不划算。

因此我就打算借助 Automator + Python 在右键菜单里添加一个按钮,可以一键复制这些重复性的操作。

实际使用效果如下:

2. 打开 automator

使用 ⌘ + Space,搜索 automator进入 自动操作

双击选择 服务

3. 编排工作流

要实现我这个功能,首先要有个触发的入口,由于我是右击文件,因此要在资源库里选择 文件和文件夹,由于我在脚本中要获取目标文件的文件名,因此 我还要选择 获取所选的访达项目

所有的逻辑实现,你可以通过 Shell 脚本编写,也可以使用 Python 脚本。

但无论是哪一种语言,都需要在工作流中引入 运行 Shell 脚本 这个模块。

由于我这边使用的是 Python ,所以在 Shell 选项中,选择 /usr/bin/pyhton (写代码时要注意这是 Python2 噢)

在这里插入图片描述

此时你应该已经注意到,运行 Shell 脚本 右边有一个选项问你:参数要如何传入脚本内呢?

默认选项是:传递到 stdin,也就是标准输入中。

因此我要想在 python 脚本中获取 目标文件的文件名,需要从 sys.stdin 中去获取。

整个脚本的内容如下,若有需要,可以参考

# coding: utf-8

import os
import sys
import shutil
import commands

def encrypt_file(file):
    filename, ext = os.path.splitext(file)
    dir_name = filename
    os.mkdir(dir_name)
    shutil.copy(src=file, dst=dir_name)
    os.chdir(dir_name)
    zip_cmd = '/usr/bin/zip -P "iswbm.com" "{}.zip" "{}"'.format(filename, file)
    zip_cmd_no_pass = '/usr/bin/zip -r "{}.zip" "{}"'.format(dir_name, dir_name)
    wget_cmd = '/usr/local/bin/wget -q http://image.iswbm.com/get_zip_pass_01.png'

    commands.getstatusoutput(zip_cmd)
    commands.getstatusoutput(wget_cmd)
    os.rename("get_zip_pass_01.png", "解压密码,看这里.png")
    os.remove(file)

    os.chdir("..")
    commands.getstatusoutput(zip_cmd_no_pass)
    shutil.rmtree(dir_name)
    print("Success!")

for file in sys.stdin:
    dir,file = os.path.split(file.strip())
    os.chdir(dir)
    if os.path.isfile(file):
        encrypt_file(file)
    else:
        print("Can not zip directionary({})!".format(file))

为了让脚本在运行完成后,能有个通知,你可以和我一样在最后再添加两个模块

  1. 设定变量的值 :把标准输出的内容赋值给 output 变量
  2. 显示通知:把 output 变量的内容,在通知里打印出来

一切完成后,使用快捷键 ⌘ + S 进行保存。

代码初步编写完成后,并不是一帆风顺的,需要调试来不断改正,

在调试的时候遇到几个问题,在这里记录一下:

  • sys.stdin 传入是文件的绝对路径,而不是文件名,因此要注意处理
  • 由于使用的是 python2,若脚本中有中文,记得在开头要注明 # coding: utf-8
  • 通过使用右键来调试,错误信息显示不全,建议使用 automator 的步进来调试,或者在终端中手动执行脚本来调试。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值