Mac OS X 中的脚本语言应用
生活随笔
收集整理的這篇文章主要介紹了
Mac OS X 中的脚本语言应用
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
http://www.applesupport.com.cn/newshow.asp?id=2442&cid=7 如你所見,Mac OS X 是一套廣受程序員喜愛的操作系統(tǒng),他們之所以如此喜歡這個系統(tǒng)的原因之一便是他們可以按照自己的偏好選擇熟悉的工具來完成工作。更詳細的說,是由下面這三個方面決定的: 1. Mac OS X 在安裝時就自帶的開發(fā)工具,從最受歡迎的全能語言 Python, Ruby 和 Perl,到小巧精悍的 Bash 和 Awk,再到 Mac 所獨有的 AppleScript,可以說是應有盡有。 2. Mac OS X 吸收了 BSD 和 Linux 操作系統(tǒng)中優(yōu)良的軟件包管理系統(tǒng),有 MacPorts 和 Fink 兩大包裝來提供其他 Unix 世界中出現(xiàn)的腳本語言,進一步延展了系統(tǒng)的開發(fā)能力。 3. OSA 腳本架構與 Scripting Bridge 技術提供了用腳本來控制和創(chuàng)建圖形界面的豐富功能,腳本語言也能成為用于開發(fā)的“First-class citizen”。 下面我們就來仔細看看這三個方面。 系統(tǒng)自備 先讓我們看看系統(tǒng)自帶的這些語言和它們的版本,以最新發(fā)布的 Mac OS X 10.5 為例,他們包括最常用的三大腳本語言: 一系列的 shell 可以按用戶喜好選擇 * bash: 3.2 "Bourne-again" shell,來自 GNU,迄今最常用的 shell,也是 Mac OS X 系統(tǒng)的默認 shell。 * zsh: 4.3.4 Korn Shell 的改進,吸收了 bash 和 csh 的一些特性。 * tcsh: 6.14.00 來自 FreeBSD 軟件庫,C Shell 的改進。 此外,還有 ksh 和 tclsh。 以及常用的文本工具: * sed: 來自 FreeBSD 的 2005/05/10 版本 * awk: 來自 Bell Labs 的 20040207 版本 awk 的小巧輕便適合完成一些文本處理的工作,尤其是與流編輯器 sed 配合起來更是威力強大。 * PHP: 5.2.4 PHP 是常用的 Web 編程語言,Mac OS X 自帶了包括 Apache 在內(nèi)的大量 Web 開發(fā)工具,除了 PHP 以外,還包括了流行的 Ruby on Rails 套件。 為什么系統(tǒng)自帶是一件很好的事情?因為這意味著從系統(tǒng)安裝完畢開始,它就給你的所有用戶提供了一個一致的分發(fā)環(huán)境,一個程序員開發(fā)的應用可以任意使用上述這些語言而不必擔心用戶是否已經(jīng)安裝。 那么,這些語言和工具是從何而來的呢?在 Mac OS X 的每個主要版本 (Major Version) 更新之前,Apple 的開發(fā)者就會與負責維護這些語言的上游來源進行同步,選用盡可能新的穩(wěn)定版本,然后作出針對 Mac 系統(tǒng)集成的一些添加和改進 (其實這些語言大都已經(jīng)有很好的 Mac OS / Darwin 平臺支持了),以 Python 為例,在 Mac OS X 10.4 系統(tǒng)中提供的是 Python 2.3,在 Mac OS X 10.5 中就更新到了 Python 的最新穩(wěn)定版本 2.5.1,同時 Apple 還提供了與系統(tǒng)開發(fā)框架,如 Quartz 2D 圖形繪制、Scripting Bridge 腳本框架、Cocoa 框架等的額外模塊。 需要說明的是,Mac OS X 中大量的文本處理工具都來自 FreeBSD 軟件庫,構成了整個“BSD 子系統(tǒng)”的一部分,所以,和 Linux 用戶習慣的 GNU 版本的同名工具使用習慣上可能會有不同,雖然它們嚴格來說都不算腳本語言,但因為經(jīng)常配合腳本一起使用,所以我們會在后面討論如何安裝 GNU 的版本。 而且,所有這些語言,只要它們原來是按照 open source 協(xié)議分發(fā)的,就仍然可以在 Apple 的[開發(fā)者網(wǎng)站](http://www.opensource.apple.com/darwinsource/) 上看到實際隨系統(tǒng)提供版本的完整代碼。 如果你對這些語言還不太熟悉,在 Apple 開發(fā)者網(wǎng)站上有一篇較為詳細的概覽性教程值得一讀:[Introduction to Open Source Scripting in Mac OS X](http://developer.apple.com/internet/opensource/opensourcescripting.html)。 那么讓我們與另外兩個常用的系統(tǒng) Windows 和 Linux 作一比較:Windows 有一套 Active Scripting 架構,所以可以在系統(tǒng)中提供 VBScript 和 JScript 這樣的語言供用戶使用,然而可惜的是這兩套語言遠非用戶所愛用的腳本語言,所以應用也往往局限于少量軟件中的腳本工具,并沒有像類 Unix 系統(tǒng)那樣成為日常工作的瑞士軍刀。事實上大部分“高級”用戶還在使用 Batch file (bat 腳本) 編程這種比 bash 簡陋得多的腳本工具,而 Windows PowerShell 這種強大的 shell 卻沒有集成進系統(tǒng)里,是甚為可惜的。 相比起來,雖然大部分 Linux 系統(tǒng)都用 Python, Ruby 和 Perl 這些腳本語言武裝到了牙齒,然而由于 Linux 內(nèi)核本身對這些語言不存在依賴,所以建構一個基本的 Linux 系統(tǒng)其實完全是可以不依賴這些語言的,不像 Mac OS X 只有唯一的官方發(fā)行,各種各樣的發(fā)行版按自己的需求對軟件包做任意裁剪,有的發(fā)行版完全可能安裝后只有 Python 沒有 Perl,有的則有 Perl 沒有 Ruby…… 總結起來仍然為軟件開發(fā)者造成了不小的困擾,因為他們在選擇開發(fā)語言時仍然要考慮會不會給用戶增加太多安裝上的負擔,不過好處是現(xiàn)代的 Linux 發(fā)行版大都擁有非常健全的軟件包管理工具,如 apt, pacman 等等,所以手動安裝起來并不困難。 第三方開發(fā)環(huán)境安裝 看完上面這部分,一個顯然的問題是:如果我需要安裝系統(tǒng)沒有安裝的語言,或者我需要已有語言的其他版本,該怎么辦呢?首先,Mac OS X 允許你以 UNIX 習慣的方式來安裝這些軟件:手工下載壓縮包、編譯 (configure, make)、安裝 (make install)。其次,和常見 Linux / BSD 系統(tǒng)一樣,Mac OS X 也有完善的軟件包管理系統(tǒng),最為常用的兩套是 [macports](http://www.macports.org) 和 fink (http://www.finkproject.org)。 MacPorts 是一套吸收了 FreeBSD 的 ports 習慣建立起來的軟件發(fā)行機制,它使用 Portfile 來描述每個軟件,以源代碼方式安裝軟件,也就是說每個安裝者通過腳本輔助來下載源代碼并編譯。假 設我希望安裝 lua 腳本語言,首先當然是到 MacPorts 官方網(wǎng)站下載安裝包裝上,然后將 MacPorts 的軟件目錄 /opt/local/bin 加入 PATH 中,以后就可以用類似下面的命令: $ port search lua lua-glut devel/lua-glut 0.5 OpenGL and GLUT bindings for the Lua programming language. lua-luasocket devel/lua-luasocket 2.0.1 The luasocket library extends lua with tcp, udp, and dns lua-lunit devel/lua-lunit 0.3 The lunit library extends lua with a simple unit testing framework lua-numlua devel/lua-numlua 0.2 Numerical package for the Lua programming language. wxLua graphics/wxLua 2.8.7.0 Lua bindings for wxWidgets lua lang/lua 5.1.3 powerful, lightweight programming language 可以看到,最后一個搜索結果就是我們需要的,讓我們再確認一下: $ port info lua lua 5.1.3, lang/lua (Variants: universal, darwin_7) http://www.lua.org Lua is a powerful, light-weight programming language designed for extending applications. Lua is also frequently used as a general-purpose, standalone language. Library Dependencies: readline Platforms: darwin Maintainers: pmq@macports.org openmaintainer@macports.org 說明 lua 除了 readline 庫以外沒有其他依賴,所以我們現(xiàn)在開始安裝: $ sudo port install lua ---> Fetching lua ---> Attempting to fetch lua-5.1.3.tar.gz from http://www.lua.org/ftp/ ---> Verifying checksum(s) for lua ---> Extracting lua ---> Configuring lua ---> Building lua with target macosx ---> Staging lua into destroot ---> Installing lua 5.1.3_0 ---> Activating lua 5.1.3_0 ---> Cleaning lua 這樣便得到了一套完整安裝的 lua 系統(tǒng),全部存放在以 /opt/local 為根目錄的路徑樹下,只要你已經(jīng)將 /opt/local/bin 加入 PATH,就可以立即執(zhí)行來試試: $ lua Lua 5.1.3 Copyright (C) 1994-2008 Lua.org, PUC-Rio > print ’Hello, world!’ Hello, world! 看來它工作得不錯。 對其他語言也是如此,MacPorts 還維護了系統(tǒng)自帶語言的許多版本,例如 Python 2.1 到 3.0a,Ruby 1.8 等等。 相比 MacPorts,fink 則是一個采用了 Debian Linux 的 [apt](http://www.debian.org/doc/manuals/apt-howto) 版本管理系統(tǒng),主要以二進制包安裝為主的發(fā)行方式,用戶不需要自己編譯軟件,只需要通過 fink 提供的命令行 (apt-get, aptitude) 來下載安裝即可,其使用與 MacPorts 類似,這里不贅述。 此外,NetBSD 的開發(fā)者也維護一套稱為 [pkgsrc](http://www.netbsd.org/docs/pkgsrc/) 的軟件發(fā)行方式,它也支持 Mac OS X 系統(tǒng),pkgsrc 也是一套基于源代碼的組織,但有一些 MacPorts 所不及的靈活性,適合老練的 BSD 用戶使用。 不管是 MacPorts 還是 Fink 或者 pkgsrc,這些由第三方開發(fā)者維護的軟件包管理系統(tǒng)都大大擴展了系統(tǒng)的功能,它們對包括大量腳本語言在內(nèi)的開放源代碼軟件進行了細致的測試和打包,所以,只要是在它們的軟件庫內(nèi)的程序,就不必擔心它們和 Mac OS X 有什么兼容性的問題。看看你關心的語言有哪些在 MacPorts 中: $ ls /opt/local/var/macports/sources/rsync.macports.org/release/ports/lang/ * [Io](http://www.iolanguage.com/) - 一套簡潔的腳本語言,受 Smalltalk 影響 * [clisp](http://clisp.cons.org) - 函數(shù)式語言 Common Lisp 的一個實現(xiàn) * [erlang](http://www.erlang.org) - 并發(fā)處理的功能使之稱為新近最為熱門的語言 * [guile](http://www.gnu.org/software/guile) - 基于 Scheme 的一套腳本語言,適合嵌入程序 * [parrot](http://www.parrotcode.org) - Perl 6 的虛擬機 * [Perl 5.10](http://dev.perl.org/perl5/) - 新近發(fā)布的 Perl 版本 * [spidermonkey](http://www.mozilla.org/js/spidermonkey) - Mozilla 的官方 JavaScript 解釋器 ... 這還只是其中的一小部分。 Mac 特有 怎樣將腳本技術結合 Mac OS X 豐富的圖形界面功能和強大的應用程序框架發(fā)揮作用?Apple 設計了 AppleScript 語言和 Scripting Bridge 架構。 [AppleScript](http://www.apple.com/applescript/) 語言是一套給普通人設計的語言,學起來相當容易,它的語法就像英語會話一樣自然,設計它的主要目的,就是用來進行日常操作的自動化,想象一下,你可以用 AppleScript 以一套統(tǒng)一的接口來操縱所有圖形界面的程序,將繁瑣的鼠標點擊、鍵盤輸入都以腳本自動智能的完成,而且它的效果和直接操作圖形界面還是一樣的。 從一方面看,AppleScript 通過系統(tǒng)提供的 Apple Event 消息機制與每個應用程序通訊 (Mac OS X 自帶的應用程序大都支持,你自己開發(fā)的應用程序也可以選擇性地支持),這是一套開放的腳本集成架構,每個應用程序都可以定義一系列的操作 (action) 讓 AppleScript 來調(diào)用,也可以提供 (expose) 一系列的數(shù)據(jù)結構讓 AppleScript 來讀取,以下面的一個腳本為例: tell application "Finder" if folder "Applications" of startup disk exists then return count files in folder "Applications" of startup disk else return 0 end if end tell 它就通過 Mac OS X 下的文件管理器 Finder 得到了用戶的 Applications 目錄中一共有多少個文件。 而每個程序提供的操作接口都可以通過 Script Editor 讀取它們的 sdef 定義文件來得到,如圖: http://developer.apple.com/documentation/AppleScript/Conceptual/AppleScriptX/Art/finder_dictionary.jpg 從另一方面看,Apple 定義了一套標準腳本架構,這樣你在設計自己的應用程序時,就不必重新發(fā)明輪子,只要沿用現(xiàn)有的 Apple Event 處理框架,你開發(fā)的應用程序就能很好的和熟悉 AppleScript 的 Mac 用戶交互了。參考 [Scriptable Applications](http://developer.apple.com/documentation/AppleScript/Conceptual/AppleScriptX/Concepts/scriptable_apps.html#//apple_ref/doc/uid/TP40001569) 就可以了解到怎樣令你的應用程序“Scriptable”的細節(jié)。 從 Mac OS X 10.5 開始,提供了一套稱為 Scripting Bridge 的工具,可以自動給你的應用程序創(chuàng)建 Objective-C 的腳本調(diào)用接口,這樣開發(fā)者不必處理繁瑣的 Apple Event 事件,只需要像調(diào)用 Objective-C 類和方法那樣調(diào)用腳本接口就可以了。而像 Ruby, Python 和 Perl 這樣的語言,也可以利用 Scripting Bridge 的標準接口來編寫程序,例如下面的 Python 程序: from Foundation import * from ScriptingBridge import * iTunes = SBApplication.applicationWithBundleIdentifier_("com.apple.iTunes") p = {’name’:’Testing’} playlist = iTunes.classForScriptingClass_("playlist").alloc().initWithProperties_(p) iTunes.sources()[0].playlists().insertObject_atIndex_(playlist, 0) 其作用就是給你的 iTunes 新增一個叫做“Testing”的播放列表,其作用和通過 AppleScript 來調(diào)用是完全一致的。細節(jié)可以閱讀 [Using Scripting Bridge in PyObjC and RubyCocoa](http://developer.apple.com/documentation/Cocoa/Conceptual/RubyPythonCocoa/Articles/UsingScriptingBridge.html#//apple_ref/doc/uid/TP40005424)。 值得一提的是,除了官方支持的的 Scripting Bridge 方式,第三方開發(fā)者們還提供了 [py-appscript](http://appscript.sourceforge.net/) 這樣的方式在 Python 中調(diào)用 Apple Event,與 AppleScript 等效,相比起來它的語法要更為清晰簡潔。 而最令 Ruby/Python 開發(fā)者感到高興的,恐怕是 Apple 官方支持了從 Ruby/Python 語言到 Objective-C 的 Cocoa 運行時環(huán)境的橋梁: RubyCocoa 和 PyObjC,它們都具有在各自語言中直接開發(fā) Cocoa 應用程序的能力,這樣,你就可以用自己喜歡的腳本語言開發(fā) Mac OS X 原生風格的應用程序。Xcode 集成開發(fā)環(huán)境中更提供了完整的模板,可以迅速創(chuàng)建出一個立即可以運行的 RubyCocoa/PyObjC 應用程序來。 比如這樣一段 Objective-C 代碼: NSButton *button = [[NSButton alloc] initWithFrame:rect]; [button setTarget:self]; [button setAction:@selector(doGoodThings:)]; [button setEnabled:YES]; [view addSubview:button]; [button release]; 就是創(chuàng)建一個指定大小 (rect) 的按鈕 (button),將它添加到視圖 view 的給定位置上。對應的 Python 代碼就是這樣: button = NSButton.alloc().initWithFrame_(rect) button.setTarget_(self) button.setAction_(’doGoodThings:’) button.setEnabled_(True) view.addSubView_(button) 將 RubyCocoa/PyObjC 的功能完整地與現(xiàn)有的 Cocoa 開發(fā)工具 (Xcode, Interface Builder)整合起來,就能得到下面這樣一個 RSS 照片瀏覽器 (用 RubyCocoa 開發(fā)): http://developer.apple.com/documentation/Cocoa/Conceptual/RubyPythonCocoa/Art/rssphotoviewer.jpg [Building a RubyCocoa Application: A Tutorial](http://developer.apple.com/documentation/Cocoa/Conceptual/RubyPythonCocoa/Articles/BuildingRubyCocoaAppl.html#//apple_ref/doc/uid/TP40005425) 是一套用 RubyCocoa 開發(fā) Cocoa 應用的完整教程。對應 Python 則可以閱讀 [Using PyObjC for Developing Cocoa Applications with Python](http://developer.apple.com/cocoa/pyobjc.html) 這份指南。 對 Ruby 愛好者,則不可錯過最近剛剛發(fā)布的 [MacRuby](http://trac.macosforge.org/projects/ruby/wiki/MacRuby),它和 RubyCocoa 的區(qū)別在于,不是在現(xiàn)有 Ruby 環(huán)境中去橋接 Cocoa 運行時,而是干脆就把整個 Ruby 的核心環(huán)境——虛擬機——搭建在了 Objective-C 運行時上,這樣每個 Ruby 類的實質(zhì)都是一個 Objective-C 類,像字符串、數(shù)組等更對應了 NSFoundation 中的 NSString, NSArray 類型,這樣等于所有的 Cocoa 資源都可以完全自由地供 MacRuby 調(diào)用,調(diào)用的性能也比橋接方式有大的提高。所以雖然它還在早期開發(fā)階段,但毫無疑問的是一個非常有希望的項目,值得一試。 小結 篇幅所限,也為了避免新接觸 Mac OS X 開發(fā)的朋友選擇太多而無所適從,本文還有許多未盡之處,例如用 AppleScript 構建圖形界面、CocoaDialog 輔助程序等等。但總結起來,Mac OS X 相比 Windows 和 Linux,能在腳本語言上很好的發(fā)揮圖形界面的優(yōu)勢,又能保持開發(fā)框架間良好的一致性,對腳本語言開發(fā)者來說實在是一個理想的操作系統(tǒng),尤其 AppleScript、Ruby 和 Python 這三套語言各有特色,也是在這個系統(tǒng)下最受歡迎的腳本語言
《新程序員》:云原生和全面數(shù)字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的Mac OS X 中的脚本语言应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mac OS 如何连接windows 文
- 下一篇: MAC 卸载程序