2013-04-17 28 views
13

Có cách nào để thực thi (và lấy kết quả) Mã AppleScript từ python mà không sử dụng tiện ích dòng lệnh osascript hoặc appscript (mà tôi không thực sự muốn sử dụng (tôi nghĩ?) Vì it's no longer developed/supported/recommended)?Gọi AppleScript từ Python mà không cần sử dụng osascript hoặc appscript?

Lý do: trong another question I've just posted, tôi mô tả một hành vi lạ/không mong muốn mà tôi đang gặp phải khi chạy một số AppleScript qua osascript. Khi tôi thực sự gọi nó từ một kịch bản python, tôi tự hỏi nếu có một cách để tuyến đường xung quanh osascript hoàn toàn, vì đó dường như là nơi mà vấn đề nằm - nhưng appcript (sự lựa chọn rõ ràng?) Trông nguy hiểm bây giờ ...

+0

Tại sao không phải là python [gói osascript] (https://pypi.python.org/pypi/osascript/)? Nó không có sẵn tại thời điểm câu hỏi này được hỏi? – ecbrodie

+0

Có vẻ như dự án đó [đã bắt đầu vào tháng 10 năm 2015] (https://github.com/russianidiot/osascript.py/commit/33455e1a42f5c3a0361b4f1e5c6952ed8574f0fe), vì vậy không, nó không có sẵn trong năm 2013. Nhưng có vẻ tốt, Vâng cảm ơn! :-) – gimboland

Trả lời

21

bạn có thể sử dụng cây cầu PyObjC:

>>> from Foundation import * 
>>> s = NSAppleScript.alloc().initWithSource_("tell app \"Finder\" to activate") 
>>> s.executeAndReturnError_(None) 
+0

Cảm ơn! Đã chấp nhận câu trả lời này vì nó có các phụ thuộc ít nhất, mặc dù 'py-applescript' cũng có vẻ tốt. :-) – gimboland

+0

Có thể muốn sửa lỗi chính tả của 'NSApplScript' để thêm 'e' sau 'Appl' - tôi đã dán mã của bạn và nó không hoạt động lần đầu tiên! – andrewb

+1

@andrewb, xong. Cảm ơn. –

20

PyPI là bạn của bạn ...

http://pypi.python.org/pypi/py-applescript

Ví dụ:

import applescript 

scpt = applescript.AppleScript(''' 
    on run {arg1, arg2} 
     say arg1 & " " & arg2 
    end run 

    on foo() 
     return "bar" 
    end foo 

    on Baz(x, y) 
     return x * y 
    end bar 
''') 

print(scpt.run('Hello', 'World')) #-> None 
print(scpt.call('foo')) #-> "bar" 
print(scpt.call('Baz', 3, 5)) #-> 15 
+0

Cảm ơn - công trình tuyệt vời. Hãy thêm PyPi vào danh sách những thứ tôi cần biết. – gimboland

+0

PyPI thực sự là bạn của bạn. Bao giờ rất hữu ích, bao giờ nên thường xuyên! –

+0

Cảm ơn ví dụ, giúp giải thích nhanh hơn rất nhiều so với tài liệu gói. – studgeek