Shell脚本调用Docker内Python脚本并返回状态码

在编写Shell脚本时,我们经常需要调用Docker容器内的Python脚本来执行特定的任务。然而,如何将Python脚本的执行结果(状态码)返回给Shell脚本,以便进行进一步的处理,是一个常见的问题。本文将介绍几种方法,帮助您实现Shell脚本与Docker内Python脚本之间的状态码传递。

### 方法一:使用环境变量

最简单的方法是通过环境变量传递状态码。在Python脚本中,您可以将状态码写入环境变量,然后在Shell脚本中读取这个环境变量的值。

**Python脚本示例:**

python

#!/usr/bin/env python

import os

# 假设我们要返回的状态码是0

os.environ['STATUS_CODE'] = '0'

**Shell脚本示例:**

bash

#!/bin/bash

# 运行Docker容器并执行Python脚本

docker run -it --rm -v $(pwd):/app python:3.8 python /app/script.py

# 读取环境变量中的状态码

status_code=$STATUS_CODE

# 根据状态码进行后续处理

if [ "$status_code" -eq 0 ]; then

echo "Python脚本执行成功"

else

echo "Python脚本执行失败,状态码:$status_code"

fi

### 方法二:使用文件

另一种方法是将状态码写入一个文件中,然后在Shell脚本中读取这个文件。

**Python脚本示例:**

python

#!/usr/bin/env python

# 写入状态码到文件

with open('/tmp/status_code.txt', 'w') as f:

f.write('0')

**Shell脚本示例:**

bash

#!/bin/bash

# 运行Docker容器并执行Python脚本

docker run -it --rm -v $(pwd):/app python:3.8 python /app/script.py

# 读取文件中的状态码

status_code=$(cat /tmp/status_code.txt)

# 根据状态码进行后续处理

if [ "$status_code" -eq 0 ]; then

echo "Python脚本执行成功"

else

echo "Python脚本执行失败,状态码:$status_code"

fi

### 方法三:使用Docker的退出码

Docker容器的退出码可以被Shell脚本捕获。当Python脚本执行完毕后,您可以在Shell脚本中检查Docker容器的退出码。

**Python脚本示例:**

python

#!/usr/bin/env python

# 退出码为0表示成功

exit(0)

**Shell脚本示例:**

bash

#!/bin/bash

# 运行Docker容器并执行Python脚本

docker run -it --rm -v $(pwd):/app python:3.8 python /app/script.py

# 检查Docker容器的退出码

docker_exit_code=$?

# 根据退出码进行后续处理

if [ "$docker_exit_code" -eq 0 ]; then

echo "Python脚本执行成功"

else

echo "Python脚本执行失败,退出码:$docker_exit_code"

fi

### 结论

以上三种方法都可以实现Shell脚本与Docker内Python脚本之间的状态码传递。您可以根据实际情况选择最适合您的方法。通过这些方法,您可以确保Shell脚本能够根据Python脚本的执行结果进行正确的处理。

更多文章请关注《万象专栏》