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

在编写Shell脚本时,我们经常需要调用Docker容器内的Python脚本来执行特定的任务。然而,如何从Docker容器内的Python脚本获取返回值(状态码)并将其传递回Shell脚本,是一个常见的问题。本文将介绍几种方法来实现这一功能。

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

最简单的方法是通过环境变量传递状态码。在Python脚本中,你可以设置一个环境变量来存储状态码,然后在Shell脚本中读取这个环境变量。

**Python脚本示例:**

python

# python_script.py

import os

# 设置状态码

os.environ['STATUS_CODE'] = '0' # 假设0表示成功

**Shell脚本示例:**

bash

#!/bin/bash

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

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

# 读取环境变量

status_code=$(echo $STATUS_CODE)

# 根据状态码执行后续操作

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

echo "Python脚本执行成功。"

else

echo "Python脚本执行失败。"

fi

### 方法二:使用文件

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

**Python脚本示例:**

python

# python_script.py

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

f.write('0') # 写入状态码

**Shell脚本示例:**

bash

#!/bin/bash

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

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

# 读取状态码文件

status_code=$(cat status_code.txt)

# 根据状态码执行后续操作

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

echo "Python脚本执行成功。"

else

echo "Python脚本执行失败。"

fi

### 方法三:使用Docker的返回值

Docker容器可以返回一个退出状态码,这个状态码可以被Shell脚本捕获。

**Python脚本示例:**

python

# python_script.py

# 假设脚本执行成功

exit(0)

**Shell脚本示例:**

bash

#!/bin/bash

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

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

# 捕获Docker容器的退出状态码

status_code=$?

# 根据状态码执行后续操作

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

echo "Python脚本执行成功。"

else

echo "Python脚本执行失败。"

fi

### 结论

以上三种方法都可以实现Shell脚本调用Docker容器内的Python脚本并获取状态码。选择哪种方法取决于你的具体需求和偏好。环境变量和文件方法适用于需要传递更多信息的场景,而Docker的返回值方法则更为直接和简洁。在实际应用中,你可以根据任务的复杂性和需求来选择最合适的方法。

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