如何在Shell腳本中嵌入Python腳本

如何在Shell腳本中嵌入Python

原shell腳本test.sh:

#!/bin/bash
function main()
{
	echo "$@" 
	exit 0
}

main "$@"

./test.sh t1 t2 t3執行結果:

username@Computer:~$ ./test.sh t1 t2 t3 
t1 t2 t3

嵌入單行的python,比如切割個字符串啥的

#!/bin/bash
function main()
{
	echo "$@" 
	# 最後那個"$@"是傳遞給python的參數
	result=$(python3 -c 'import sys; print(sys.argv[1].split(","))' "$@")
	echo "$result"
	exit 0
}

main "$@"

./test.sh t1,t2,t3執行結果:

username@Computer:~$ ./test.sh t1,t2,t3 
t1,t2,t3
['t1', 't2', 't3']

其實就是直接調用python程序,程序的輸出就相當於返回值可以傳遞給變量,這裏直接賦值給result,獲取值用$()可以,用``也可以。看上去好像有點複雜,其實和:result=$(echo 123) 是一個道理,只不過把echo 123換成了一行python腳本。如果只是讓python實現一些功能,不關心返回值的話,完全可以不‘print’任何東西。

嵌入多行python:

#!/bin/bash
function getNum()
{
	# "$@"是傳遞給python的參數 python3 - 相當於從標準輸入讀入。
	python3 - "$@" <<END
#!/usr/bin/python3
import sys
if __name__ == "__main__":
    print(len(sys.argv[1].split(",")))
END
}

function main()
{
	echo "$@" 
	num=`getNum "$@"`
	echo "arg number : $num"
	exit 0
}

main "$@"

在兩行END之間,可以像平時寫大量的python代碼。

需要注意的是,縮進的地方手動用空格縮進,否則會有違法縮進的問題。

./test.sh 123,123,123執行結果:

username@Computer:~$ ./test.sh 123,123,123
123,123,123
arg number : 3

掌握了這兩種寫法,就可以在pythonshell中反覆橫跳實現各種功能。頻繁調用系統命令用shell,複雜的功能邏輯直接用python搞定,比如什麼修改配置文件啊之類的。在shell中做這些實在費勁。

不過這些應用場景也有限,通常我們還是建議分別寫在不同的文件裏相互調用,除非一些特殊的場景需要儘可能寫在同一個文件中的話,可以參考上面的寫法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章