python - 从 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
解决方案
首先,在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
按照评论中的建议删除。
推荐阅读
- python - 全球宣言
- excel - 根据列表值在 Power Query 中创建条件列
- vue.js - Vuetify - 等待波纹动画完成
点击/路由 - javascript - 建立数据库连接(MongoDB、Javascript)
- c# - 将 C# WPF 应用程序注册为协议处理程序
- python - 仅将一个 CSV 文件中的两列更新到另一个 CSV 文件
- python - 使用 OpenCV python 进行伽马校正的问题
- java - 修改 PB 配置时,ProcessBuilder 产生了进程行为
- python-3.x - 在 Spyder 4.0 中隐藏 runfile() 命令
- sql - 在输出中使用计数函数查看优化