从Python传递变量到AppleScript
我正在尝试写一个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 个回答
你遇到的问题是,你在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]"
这样的字符串,那么变量x
和y
(假设它们存在)就没什么关系了:你要求字符串里包含的就是字母'x'
和'y'
(还有一些方括号)。你需要真正构建一个包含列表中相应字符的字符串。