星期四, 7月 26, 2007

續: shell script裡使用python的技巧

http://timchen119.blogspot.com/2007/02/shell-scriptpython.html
繼上次這篇文章裡的方法, lloyd大大又教了我更多用python只寫一行程式碼的方法,比如:

cat /etc/passwd | python -c "$(echo -e 'import sys \nfor i in sys.stdin: \n s=i.split(":")\n if s[0] == "root": \n  for j in range(len(s)): print s[j],')"

或者是
source lpython.sh

#lpython.sh
lpython ()
{
python -c "$(echo -e "$@")"
}
然後
cat /etc/passwd | lpython 'import sys \nfor i in sys.stdin: \n s=i.split(":")\n if s[0] == "root": \n  for j in range(len(s)): print s[j],'


這個方法巧妙的運用了 \n 跟空白來避開python在one-liner情況下的縮排問題, 不失為一種方便的方法.

相同的需求也有例如pyone之類的實作方式, 不過比較起來我比較喜歡lloyd的方法.

2 則留言:

逍遥子Odysseus 提到...

dont understand

使徒提姆 !? 提到...

這篇文章討論的重點其實是在於如何在不新增一個.py檔的情況下在shell script裡直接使用python, 只能算是一個hack, 對於一般的需求而言, 其實只要新增一個新的python檔案就可以了.