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

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

shell调用python函数 参数 返回(shell调用python)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发表评论

登录后才能评论