Mac下Python调用AppleScript执行含空格路径脚本报错求助
解决Mac下带空格路径的AppleScript批量执行问题
问题原因
你写的代码里,AppleScript的do script命令用双引号包裹了整个shell命令,当shell命令里的路径带空格需要加引号时,内外层双引号会冲突,导致AppleScript解析出错,shell最终只读到空格前的半截路径,自然找不到文件。
几种可行的解决办法
办法1:转义AppleScript里的双引号
给带空格的路径套双引号,同时把这些双引号在AppleScript字符串里转义成\",另外用os.path.expanduser把~转成绝对路径,避免路径解析坑:
from applescript import tell import os # 把波浪号展开成绝对路径,防止路径解析出问题 script_path = os.path.expanduser("~/Desktop/untitled folder/test.py") # 给路径加双引号,构造shell命令 yourCommand = f'python3 "{script_path}" 1 51' # 把命令里的双引号转义后,传给AppleScript的do script tell.app('Terminal', f'do script "{yourCommand.replace('"', '\\"')}"')
办法2:用单引号包裹shell里的路径
shell支持用单引号包裹带空格的路径,这样就不会和AppleScript外层的双引号冲突,写法更简单:
from applescript import tell import os script_path = os.path.expanduser("~/Desktop/untitled folder/test.py") # 用单引号把路径包起来,shell能正确识别带空格的路径 yourCommand = f"python3 '{script_path}' 1 51" # 直接传给AppleScript就行,不用额外转义 tell.app('Terminal', f'do script "{yourCommand}"')
批量执行不同参数的示例
要是你要批量开终端执行不同参数(比如50、100、150),可以这么写循环:
from applescript import tell import os script_path = os.path.expanduser("~/Desktop/untitled folder/test.py") # 要执行的批量参数列表 batch_params = [50, 100, 150] for param in batch_params: yourCommand = f"python3 '{script_path}' {param}" tell.app('Terminal', f'do script "{yourCommand}"')
验证小技巧
- 先打印
script_path确认路径是对的,比如print(script_path),确保输出是/Users/你的用户名/Desktop/untitled folder/test.py - 执行后看终端窗口里的命令,确认路径是被单引号或双引号正确包裹的,没有被空格拆成两半
内容的提问来源于stack exchange,提问作者kartik mittal
相关产品推荐
相关产品推荐

