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

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

 

  • 6
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
如果你想使用Python来执行一个只存在于Shell脚本函数,你需要在Python调用Shell脚本并传递函数名作为参数。然后,在Shell脚本,你可以通过处理传递的参数来执行相应的函数。 以下是一个示例,展示了如何在Python执行一个只存在于Shell脚本函数Python脚本(`execute_shell_function.py`): ```python import subprocess def execute_shell_function(function_name): command = f"bash my_script.sh {function_name}" process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) output, error = process.communicate() output = output.decode().strip() return output # 指定要执行的函数名 function_name = "my_function" # 执行Shell脚本函数获取执行结果 output = execute_shell_function(function_name) print(f"Function '{function_name}' output: {output}") ``` Shell脚本(`my_script.sh`): ```bash #!/bin/bash # 定义一个名为my_function的函数 my_function() { echo "Hello, I am a function!" } # 获取传递给Shell脚本的第一个参数 function_name=$1 # 根据传递的函数名执行相应的函数 "$function_name" ``` 请确保在执行Python脚本之前,将`my_script.sh`脚本设置为可执行权限(例如:`chmod +x my_script.sh`)。 运行Python脚本时,它将调用Shell脚本,并传递要执行的函数名作为参数。Shell脚本将根据传递的函数名执行相应的函数,并将结果返回给Python脚本。最后,Python脚本将输出函数的执行结果。 希望这个示例可以帮助到你!如果还有其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值