shell脚本中调用python脚本的函数并获取python脚本函数的return值

本文详细介绍如何在Shell脚本中调用Python脚本的函数,包括获取函数返回值及检查服务器端口状态的示例。通过具体代码展示,帮助读者理解跨语言交互的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

shell脚本中调用python脚本的函数并获取python脚本函数的return值

例子1:

废话少说,直接上代码:

python脚本:merge_report.py

# coding=utf-8
  
import sys

def main(param):
        return param

def find_report(param):
        return param

if __name__ == "__main__":
        print main('main')
        print find_report('find_report')

shell脚本:test_sh.sh

#!/bin/bash
# cd 到python脚本所在的目录,以便导入
cd /home/shell_python
# 打印当前路径
echo `pwd`
# 执行python函数获取函数return的返回值,并赋值给变量
haha=`python -c 'import merge_report; print merge_report.find_report("bilibili")'`
# 打印结果
echo  $haha

执行shell脚本:

sh test_sh.sh

输出:

bilibili

 

 

例子2:

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

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值