如何从Python脚本中运行AppleScript?

如何从Python脚本中运行AppleScript?

问题描述:

如何在Python脚本中运行AppleScript?如何从Python脚本中运行AppleScript?

的问题说,这一切.. (在Mac明显)

this nice article暗示简单的解决方案

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

虽然今天你使用subprocess模块,而不是os.system,当然。

一定还要检查page 2的文章了解更多的信息和选项,包括appscript

+0

如果你打算做任何不平凡的苹果事件脚本从python,你应该使用appscript。它设计精良,成熟并且得到很好的支持。 – 2010-08-15 22:46:51

+0

@Ned,当然,但为了这样一个简单,特殊的目的,就像调用简单的applescript,osascript -e和subprocess.call的“愚蠢的技巧”,正如文章的第1页我提到的文章使用旧的'os.system',但这是一个细节;-)可能就足够了。 – 2010-08-16 00:08:44

+0

哦,亚历克斯,我当然不反对*你*! – 2010-08-16 00:51:32

A subprocess版本允许原样运行原始Apple脚本,而不必转义引号和其他字符,这可能会非常棘手。它是脚本的简化版本,发现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()将关闭输入和输出流。

+1

在python 3中这是行不通的,需要在popen上增加一个参数universal_newlines = True。请参阅https://*.com/a/45133926/1534775 – gbonetti 2017-07-16 22:48:35

我得到的输出乡亲......在这里它的下面:

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]