如何在Python脚本中运行AppleScript?

时间:2010-08-15 21:16:28

标签: python macos applescript

如何在Python脚本中运行AppleScript?

问题说明了一切...... (显然在Mac上)

4 个答案:

答案 0 :(得分:11)

this nice article建议使用简单的解决方案

cmd = """osascript -e 'tell app "Finder" to sleep'"""
def stupidtrick():
    os.system(cmd)

虽然今天您使用的是subprocess模块,而不是os.system

请务必查看文章的page 2以获取更多信息和选项,包括appscript

答案 1 :(得分:5)

允许运行原始苹果脚本的subprocess版本,无需转义引号和其他可能棘手的字符。它是找到here脚本的简化版本,它也可以进行参数化和正确转义(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()将关闭输入和输出流。

答案 2 :(得分:0)

我得到了输出人员......以下是:

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]

答案 3 :(得分:0)

我非常沮丧,因为苹果自己的文档中缺乏有关如何执行此操作以及传递参数的详细信息。我必须以字符串形式发送所需的arg(在本例中为zoom 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