如何在Python脚本中运行AppleScript?
问题已经说得很清楚了。 (在Mac上,显然)
问题已经说得很清楚了。 (在Mac上,显然)
subprocess
版本,允许原样运行一个苹果脚本,而不必转义引号和其他可能会出现问题的字符。它是从这里找到的脚本的简化版本,该脚本还包括参数化和适当的转义(Python 2.x)。import subprocess
script = '''tell application "System Events"
activate
display dialog "Hello Cocoa!" with title "Sample Cocoa Dialog" default button 2
end tell
'''
proc = subprocess.Popen(['osascript', '-'],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE)
stdout_output = proc.communicate(script)[0]
print stdout_output
注意:如果您需要使用相同的Popen实例执行多个脚本,则需要使用
proc.stdin.write(script)
进行显式写入,并使用proc.stdout.read()
进行读取,因为communicate()
将关闭输入和输出流。
我得到了输出结果... 在这里:
import subprocess
import sys
for i in range(int(sys.argv[1])):
ip = str(sys.argv[2])
username = str(sys.argv[3])
pwd = str(sys.argv[4])
script = '''tell application "Terminal"
activate
do script with command "cd Desktop && python test_switch.py {ip} {username} {pwd}"
delay 15
end tell
'''
proc = subprocess.Popen(['osascript', '-'],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE)
stdout_output = proc.communicate(script.format(ip=ip, username=username, pwd=pwd))[0]
我对苹果自己的文档缺乏关于如何执行此操作并传递参数的详细信息感到非常沮丧。我不得不将所需的参数(在这种情况下是缩放ID)作为字符串发送,否则参数就无法传递到AppleScript应用程序中。
以下是我的Python代码运行:
f = script if os.path.exists(script) else _tempfile()
if not os.path.exists(script):
open(f,'w').write(script)
args = ["osascript", f, str(zoom_id)]
kwargs = {'stdout':open(os.devnull, 'wb'),'stderr':open(os.devnull, 'wb')}
#kwargs.update(params)
proc = subprocess.Popen(args,**kwargs)
这是我的AppleScript代码:
on run argv
set zoom_id to 0
zoom_id = item 1 in argv
tell application "zoom.us"
--do stuff
end tell
end run