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

如何从Bash脚本向Python脚本正确传递多个列表类型参数

问题修复方案

问题根源

Shell 中未被双引号包裹的变量在执行时会发生分词扩展:你传入的"2021 2022"作为$year变量值时,不带引号调用会被拆成2021、2022两个独立参数,"9 10"同理拆成两个参数,最终 Python 实际收到4个入参,导致逻辑异常。

修复方法

修改test.sh中调用 Python 脚本的行,给变量包裹双引号,阻止分词扩展:

#!/bin/bash

# year month as arguments.
year=$1
month=$2

echo 'Working on year' "$year"
echo 'Working on month' "$month"

# 核心修改:给$year、$month加双引号,保证带空格的内容作为单个参数传递
python path/test.py "$year" "$month"

修复后执行sh test.sh "2021 2022" "9 10"即可得到预期输出。

Python 代码优化建议

你现有的Convert函数可以简化,同时提升鲁棒性:

  • split()不带参数时会自动按任意空白字符(空格、制表符、换行等)分割,还会自动忽略首尾空格、连续空格,避免生成空列表元素
  • 可以直接将年份、月份转为整型,避免后续使用时还要处理字符串类型
    优化后的代码如下:
import sys

def str_to_int_list(string):
    # 按任意空白分割后转整型,更适配时间类参数的使用场景
    return [int(item) for item in string.split()]

year = str_to_int_list(sys.argv[1])
month = str_to_int_list(sys.argv[2])

print(f"There are {len(year)} year(s)")
print(f"There are {len(month)} month(s)")

for y in year:
    print(f"Working on year {y}")
    for m in month:
        print(f"Working on month {m}")

内容的提问来源于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 03:06:02