首页 > 解决方案 > 从 Python 将变量传递给 bash 脚本

问题描述

我正在尝试将变量从 python 脚本传递给 bash,但无法在 bash 中调用该变量。

clustername=sys.argv[1]

subprocess.check_call("/data/path/script.sh '%s'" % str(clustername), shell=True, stdout=subprocess.PIPE, universal_newlines=True)

并尝试打印subprocess输出,但无法打印。它只返回代码

下面是 bash 脚本:

#!/bin/bash
clustername=$clustername # invoking from pythonscript
------
---Some logic -
---end

标签: pythonpython-3.xbash

解决方案


首先,在bash你应该做的文件中:

#!/bin/bash
clustername=$1 # invoking from pythonscript

获取传递给脚本的命令行参数。

其次,使用check_call(),您将无法捕获bash脚本的输出。您将需要使用subprocess.run()orsubprocess.check_output()或类似的东西来实现这一点。

您可以尝试执行以下操作:

import sys
import subprocess

clustername=sys.argv[1]
print(subprocess.run(["/data/path/script.sh", str(clustername)], universal_newlines=True).stdout)

check_call()只会返回返回码而不是标准输出。check_output()如果您想查看输出,也可以尝试。

您还可以使用以下方法执行以下操作check_output


print(subprocess.check_output(["/data/path/script.sh", str(clustername)], universal_newlines=True))
编辑

shell=True按照评论中的建议删除。


推荐阅读