从Python传递变量到AppleScript

0 投票
1 回答
737 浏览
提问于 2025-04-18 17:17

我正在尝试写一个Python脚本,把文本文件里的字符作为按键输入到Mac系统中。

这个文本文件的格式是每个字符一列:

我把这些字符读进了一个叫做lines的列表里。这部分看起来没问题,比如当我输入lines[3]时,第三个字符会正常显示出来。

现在我想用苹果脚本把这个字符作为按键发送到Mac上,使用的代码如下:

import os 
for f in xrange ( VALUE ):
osascript -e 'tell application "System Events" to keystroke linesf]'

但是它对list[f]这一部分不太满意(出现了语法错误,光标在最后一个撇号下方)。我怀疑是因为变量f在这个命令中不可用,但我不太确定。有没有人能给点建议?我知道for循环里的那部分需要缩进,但这个对话框不让我缩进,不知道为什么。在我测试的脚本里是正确的。

提前谢谢你们。

编辑:

那些是打错了,应该是lines,而不是list,冒号应该有,而且需要缩进。修正这些后,我得到的结果还是一样。我不能简单地遍历这个列表,这只是for循环的一部分,后面的内容需要这样结构才能正常工作。

我该如何修复以osascript开头的那一行?

顺便说一下,我是通过编辑这个问题的接受答案得到这个的:在Python中有没有适用于Mac的sendKey?

1 个回答

2

你遇到的问题是,你在Python程序中尝试使用命令行指令。Python看到osascript -e 'tell application "System Events" to keystroke list[f]'这段代码时,以为你想从osascript中减去e,但对后面的字符串'tell application "System Events" to keystroke list[f]'就不知道该怎么处理了。

这里有很多地方做错了。首先,你发的代码不可能是你实际用的,因为你的for循环缺少了冒号(应该是因为这个而报错),而且你也没有把for循环里面的代码缩进。其次,你导入了os模块,我猜你是想用os.system来执行命令行指令。第三,你不应该把列表命名为list,因为list这个名字已经被用来表示实际的列表类了(这个类很有用,比如你可以用list('foobar')来创建一个列表['f', 'o', 'o', 'b', 'a', 'r'])。第四,如果你想遍历列表中的每一项,就真的去做这个。第五,如果你写了像"keystroke x[y]"这样的字符串,那么变量xy(假设它们存在)就没什么关系了:你要求字符串里包含的就是字母'x''y'(还有一些方括号)。你需要真正构建一个包含列表中相应字符的字符串。

撰写回答