我決定用Python重寫我們所有的Bash腳本(沒有那麼多)作爲我的第一個Python項目。其原因是,儘管在Bash中流利,但我覺得它有點陳舊,因爲我們的系統正處於開發的第一階段,所以我認爲現在切換到Python將是正確的選擇。什麼腳本不應該從bash移植到python?
是否有腳本應該總是寫在Bash中?例如,我們有一個init.d守護進程腳本 - 可以使用Python嗎? 我們運行CentOS。
謝謝。
我決定用Python重寫我們所有的Bash腳本(沒有那麼多)作爲我的第一個Python項目。其原因是,儘管在Bash中流利,但我覺得它有點陳舊,因爲我們的系統正處於開發的第一階段,所以我認爲現在切換到Python將是正確的選擇。什麼腳本不應該從bash移植到python?
是否有腳本應該總是寫在Bash中?例如,我們有一個init.d守護進程腳本 - 可以使用Python嗎? 我們運行CentOS。
謝謝。
從某種意義上說,你可以做到這一點。但/etc/init.d
中的腳本通常需要加載配置數據和一些功能(例如,在控制檯上打印漂亮的綠色OK
),這在Python中很難模擬。
因此,儘量轉換那些有意義的(即那些包含複雜邏輯的)。如果你需要工作控制(啓動/停止過程),那麼bash比Python更適合。
+1(固定答案) – ChristopheD 2010-05-17 20:18:02
通常,/etc/init.d中的腳本寫在OS的「本地shell」(例如bash,sh,posix-sh等)中。對於將在較低init級別運行的腳本尤其如此(例如,不是每個目錄都將以單用戶模式進行安裝,包括可能安裝python或站點庫的任何位置)。
大多數操作系統都提供了一些「幫助函數」,使得在某些本地shell中編寫腳本變得更容易。這些腳本定義了編寫服務腳本時所需/期望的某些返回代碼和消息。基於RedHat的系統,請參見:
/etc/init.d/functions
除此之外,在/etc/init.d服務腳本可以用任何語言(包括編譯語言)編寫。一般調用語法將需要支持。通常應該支持三個參數:啓動,停止和狀態。根據腳本的目的,一些其他參數可能是適當的。
% /etc/init.d/foo (start|stop|status)
+1,指出在引導過程中Python可能不可用,提及init腳本shell函數,並解釋init腳本的需求。在許多POSIX系統上,Python安裝在/ usr /下面,可能位於單獨的分區上。 init腳本函數庫的另一個例子是Linux Standard Base中的/ lib/lsb/init-functions,它可在Debian,Ubuntu,SUSE和其他許多Linux系統上使用。 – 2010-05-17 21:24:17
每個任務都有更適合它的語言,而不是那樣。替換反引號` sh
的引用在Python中非常笨重,因爲引用的內容很多,只是爲了說明一對夫婦。有可能更好的項目,以減少你的牙齒。
上面所說的關於Python的所有內容都相對較重,並且在需要時不一定可用。
我編寫的某些腳本只涉及在某些目錄中循環遍歷一個glob,然後在它們上執行一些管道系列命令。 python中這種事情更乏味。
我會反對Bash是「古老」的表徵。僅僅因爲某些事情已經存在了一段時間,並不會使它不那麼有價值或不合時宜。例如,當我喜歡Ruby時,我幾乎從不認爲它是系統啓動腳本工作的正確工具,因爲易碎的gem依賴可以讓所有事情都發生得很厲害。在適當的地方堅持使用Bash。 – 2010-05-17 20:27:40
我完全同意約翰的觀點,另外我會指出,Bash仍在開發中,包括腳本功能的增加。查看更新日誌:http://tiswww.case.edu/php/chet/bash/NEWS – Cascabel 2010-05-17 20:48:23