Python中如何将gcloud命令输出的URL正确追加到数组
问题根源
os.system()的返回值是命令的退出状态码,根本不是命令打印的内容:状态码为0代表命令执行成功,非0代表执行出错。
你运行gcloud时控制台看到的URL,是命令直接输出到终端的内容,从来没有被赋值给result_val变量,所以最后数组里存的全是代表执行成功的0。
修复方法
用Python官方推荐的subprocess模块替代os.system,直接捕获命令的标准输出内容即可,修正后的代码:
import subprocess zone = ["z1", "z2", "z3"] result_1 = [] for z in zone: # 传参用列表形式,避免字符串拼接的注入风险 cmd = ["gcloud", "command1", z, "--command2"] # 捕获输出,自动转字符串,去除首尾多余空白/换行 url = subprocess.check_output(cmd, text=True).strip() result_1.append(url) print(result_1)
运行后就能得到你期望的URL数组:
["https://sample-domain.com/test/abc/1","https://sample-domain.com/test/abc/2","https://sample-domain.com/test/abc/3"]
补充说明:
- 如果你用的Python版本低于3.7,把参数里的
text=True替换成universal_newlines=True即可,效果完全一致 - 不要用字符串拼接的方式拼shell命令,用列表传参可以自动处理特殊字符转义,避免命令注入风险
内容的提问来源于stack exchange,提问作者Madura Dissanayake
相关产品推荐
相关产品推荐

