如何从Python脚本中运行AppleScript?

如何从Python脚本中运行AppleScript?,python,macos,applescript,Python,Macos,Applescript,如何从Python脚本中运行AppleScript 这些问题说明了一切。。 (显然是在Mac电脑上)提出了简单的解决方案 cmd = """osascript -e 'tell app "Finder" to sleep'""" def stupidtrick(): os.system(cmd) 当然,今天您使用的是子流程模块,而不是os.system 请务必查看本文,了解更多信息和选项,包括。一个允许按原样运行原始apple脚本的子流程版本,而不必转义引号和其他可能很棘手的字符。它是

如何从Python脚本中运行AppleScript

这些问题说明了一切。。 (显然是在Mac电脑上)

提出了简单的解决方案

cmd = """osascript -e 'tell app "Finder" to sleep'"""
def stupidtrick():
    os.system(cmd)
当然,今天您使用的是
子流程
模块,而不是
os.system


请务必查看本文,了解更多信息和选项,包括。

一个允许按原样运行原始apple脚本的
子流程版本,而不必转义引号和其他可能很棘手的字符。它是找到的脚本的简化版本,它还进行参数化和正确转义(Python2.x)

导入子流程
脚本=''告诉应用程序“系统事件”
激活
显示标题为“样本可可对话”的对话框“Hello Cocoa!”,默认按钮2
结束语
'''
proc=subprocess.Popen(['osascript','-'],
stdin=子流程.PIPE,
stdout=子流程(管道)
标准输出=进程通信(脚本)[0]
打印标准输出
注意:如果您需要使用同一个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)
这是我的申请书:

on run argv
    set zoom_id to 0
    zoom_id = item 1 in argv
    tell application "zoom.us"
       --do stuff
    end tell
end run

如果您打算从Python编写任何类型的非平凡的Apple事件脚本,您应该使用appscript。它设计得很好,成熟,支持得很好。@Ned,当然,但是为了调用一个简单的applescript,osascript-e和subprocess.call的“愚蠢的把戏”,正如文章第1页所建议的那样(我提到的文章使用了旧的
os.system
,但这是一个细节;-)可能就够了。哦,亚历克斯,我当然没有不同意你的意见!appscript不再受支持不幸的是,“不再受支持”是什么意思?在Python3中,这不起作用,需要在popen上添加一个参数universal_newlines=True。看见