Shell调用Python函数

Shell调用Python函数

Shell脚本调用Python函数,本例子是通过Shell调用Python脚本,检查服务器上的某端口是否开启,编写的Python脚本port.py,脚本内容:

#!/usr/bin/python
# port.py

import socket

def scan(port):
    s = socket.socket()
    s.settimeout(0.1)
    if s.connect_ex(('localhost', port)) == 0:
        return 'port: ' + str(port) + ' open'
    else:
        return 'port: ' + str(port) + ' not open'
    s.close()

if __name__ == '__main__':
  scan()

 

 在Shell脚本中,这样编写命令

    cd /home/appuser
    checkresult=`python -c 'import port; print port.scan(80)'`
    echo $checkresult

    
语句解释:首先cd到要执行的Python脚本目录,然后使用 python -c 'import port; print port.scan(80)' 调用port模块中的scan函数,检查80端口是否正在使用。-c选项是告诉Python来执行一些Python命令

echo输出结果

port: 80 open

 

如果传入一个不是正在使用的端口号801

checkresult=`python -c 'import port; print port.scan(801)'`

echo输出结果

port: 801 not open

 

另外,`python -c 'import port; print port.scan(80)'`  也可以写成  $(python -c 'import port; print port.scan(80)')

 

实际使用中的一个例子,Shell脚本调用一个Python方法,通过socket检查远端的IP和端口是否可连通

Python脚本pysocket.py:

#!/usr/bin/python
 
import socket
 
def scan(ip,port):
    s = socket.socket()
    s.settimeout(2)
    
    if s.connect_ex((str(ip), port)) == 0:
        return 0
    else:
        return 1
    s.close()
 
if __name__ == '__main__':
    scan()

pysocket.py中的scan方法里,如果通过socket能连接上ip和端口的服务,则返回0值,否则返回1

 

Shell脚本

max_check=5
#检查服务是否启动
function check() {
     #先进入到pysocket.py所在目录
     cd /opt/data/py
	 i=1
	 while [ $i -le $max_check ]
	 do
		 echo "$i th check: " $1 " " $2
		 reval=$(python -c 'import pysocket; print pysocket.scan("'$1'",'$2')')
		 echo "check result: "$reval
		 if [ $reval -eq 0 ]; then
			 echo "check success"
			 return 0
		 else
			 echo "next check after 30 seconds"
			 sleep 30
		 fi
		 let i++
	 done
     return 1
}

   Shell中的check函数中,通过 $(python -c 'import pysocket; print pysocket.scan("'$1'",'$2')') 调用pysocket.py 的scan方法并传参数,如果连接不通,每次检查后等待30秒,最多检查5次。

 Shell调用check函数

check 10.7.128.186 26666

 

以上为编写运维脚本的朋友提供帮助

 

  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值