如何将年份列表从shell传递给Python并解决循环遍历单个字符的问题
问题根源
你当前的代码存在两处逻辑问题:
- Python中
sys.argv[1]拿到的是完整字符串"2021 2022",直接遍历字符串会逐个读取单个字符,自然得到2、0、2、1这类结果 - Shell向Python传参的逻辑没有对应适配列表类型的参数接收
修复方案
方案一(更推荐,兼容性更强)
1. 修改test.py代码
直接读取所有传入的位置参数作为年份列表:
import sys # 跳过sys.argv[0](即脚本本身路径),取后续所有参数为年份列表 years = sys.argv[1:] for year in years: print("Working on year", year)
2. 修改test.sh代码
将传入的年份字符串拆分为多个参数透传给Python:
#!/bin/bash year=$1 echo "Working on years: $year" # 不加引号的$1会自动按空格拆分多个参数 python path/test.py $year
执行效果
执行sh test.sh '2021 2022'即可得到预期输出:
Working on years: 2021 2022 Working on year 2021 Working on year 2022
该方案也支持直接执行sh test.sh 2021 2022(不需要给年份加引号),适用场景更广。
方案二(仅修改Python代码,无需改动Shell)
如果不想调整Shell逻辑,可以直接在Python中对拿到的字符串做空格拆分:
import sys year_str = sys.argv[1] # 按空格拆分字符串得到年份列表 years = year_str.split() for year in years: print("Working on year", year)
内容的提问来源于stack exchange,提问作者tuan gou
相关产品推荐
相关产品推荐

