2010-05-17 69 views
1

我決定用Python重寫我們所有的Bash腳本(沒有那麼多)作爲我的第一個Python項目。其原因是,儘管在Bash中流利,但我覺得它有點陳舊,因爲我們的系統正處於開發的第一階段,所以我認爲現在切換到Python將是正確的選擇。什麼腳本不應該從bash移植到python?

是否有腳本應該總是寫在Bash中?例如,我們有一個init.d守護進程腳本 - 可以使用Python嗎? 我們運行CentOS。

謝謝。

+2

我會反對Bash是「古老」的表徵。僅僅因爲某些事情已經存在了一段時間,並不會使它不那麼有價值或不合時宜。例如,當我喜歡Ruby時,我幾乎從不認爲它是系統啓動腳本工作的正確工具,因爲易碎的gem依賴可以讓所有事情都發生得很厲害。在適當的地方堅持使用Bash。 – 2010-05-17 20:27:40

+0

我完全同意約翰的觀點,另外我會指出,Bash仍在開發中,包括腳本功能的增加。查看更新日誌:http://tiswww.case.edu/php/chet/bash/NEWS – Cascabel 2010-05-17 20:48:23

回答

3

從某種意義上說,你可以做到這一點。但/etc/init.d中的腳本通常需要加載配置數據和一些功能(例如,在控制檯上打印漂亮的綠色OK),這在Python中很難模擬。

因此,儘量轉換那些有意義的(即那些包含複雜邏輯的)。如果你需要工作控制(啓動/停止過程),那麼bash比Python更適合。

+0

+1(固定答案) – ChristopheD 2010-05-17 20:18:02

2

通常,/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

+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

1

每個任務都有更適合它的語言,而不是那樣。替換反引號` sh的引用在Python中非常笨重,因爲引用的內容很多,只是爲了說明一對夫婦。有可能更好的項目,以減少你的牙齒。

上面所說的關於Python的所有內容都相對較重,並且在需要時不一定可用。

0

我編寫的某些腳本只涉及在某些目錄中循環遍歷一個glob,然後在它們上執行一些管道系列命令。 python中這種事情更乏味。