You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将年份列表从shell传递给Python并解决循环遍历单个字符的问题

问题根源

你当前的代码存在两处逻辑问题:

  1. Python中sys.argv[1]拿到的是完整字符串"2021 2022",直接遍历字符串会逐个读取单个字符,自然得到2、0、2、1这类结果
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 06:15:10