Please enable java script to visit.
NOTEBOOK
HOMEPHP / MySQLJS / HTMLWXappPythonC++Blender其他
在Automator中运行Python代码,并传递文件夹路径作为变量 - NOTEBOOK
在Automator中运行Python代码,并传递文件夹路径作为变量
Python
Posted on 2023-05-31
摘要 : 将 automator 设置为服务,可以在文件夹上右键,从而遍历该文件夹下所有文件,找出以“.”号为开始的文件名,并删除。
❱ 设置一个automator系统服务

新建一个 automator,并设置为服务。


将服务应用到“文件夹”,位于“finder”。


插入 实用工具 >> 运行 Shell 脚本 >> 选择 /bin/bash >>作为自变量
注意!是 /bin/bash ,而不是 /usr/bin/python,因为不想使用Mac自带的python2,而是想使用 python3。如果想直接全部Python代码,则看后面。


❱ 调用 python3 而不是 python (Mac自带2.0)

调用 python3 运行 test.py,并且将文件夹路径以 $1 方式传递给代码
/Library/Frameworks/Python.framework/Versions/3.8/bin/python3 /user/desktop/test.py "$1"


在python中要获得路径,则使用下面代码获得:
#获得右键文件夹路径
folder_path = sys.argv[1].strip('“”')

# .strip('“”') 是去掉路径前后的中文引号


❱ 如果想把python 代码直接写在automator中:

需要使用 <<EOF 来包裹多行代码,顺序也有点不一样:
/Library/Frameworks/Python.framework/Versions/3.8/bin/python3 - "$1" <<EOF
#多行 python代码1
#多行 python代码2
#多行 python代码3

EOF



❱ 遍历该文件夹下所有文件,找出以“.”号为开始的文件名,并删除。

在Shell脚本框中写入以下代码
/Library/Frameworks/Python.framework/Versions/3.8/bin/python3 - "$1" <<EOF
# 使用 python3
# "$1"引入文件夹路径,后续才能使用 sys.argv[1]
# strip('“”'),去掉路径前后的引号
# E_O_F 是可以执行多行代码

import os
import sys

#获得右键路径
folder_path = sys.argv[1].strip('“”')
txt = ''
#遍历,找出 点号开头的文件
for root, dirs, files in os.walk(folder_path):
for file in files:
if file.startswith('.'):
os.remove(os.path.join(root, file))
txt += os.path.join(root, file)+'\n'
#记录
with open(folder_path+'/be_deleted.txt','w')as f:
f.write(txt)

#弹出提示框
from tkinter import messagebox
messagebox.showinfo("点号文件已删除", '已删除列表:\n'+folder_path+'/be_deleted.txt')

EOF





❱ 如果选择 /usr/bin/python,全部使用python代码

只能使用mac系统自带的python2,无法使用 python3。
修改成 /usr/bin/python。

在脚本框中输入:
import os
import sys

#获得右键路径
folder_path = sys.argv[1].strip('“”')
txt = ''
#遍历,找出 点号开头的文件
for root, dirs, files in os.walk(folder_path):
for file in files:
if file.startswith('.'):
os.remove(os.path.join(root, file))
txt += os.path.join(root, file)+'\n'

#记录
with open(folder_path+'/mac_hidden_files_were_deleted.txt','w')as f:
f.write(txt)

注意!这种方式无法调用 “from tkinter import messagebox” 弹出提示框