如何通过argparse从Bash向Python传递多个数组?
从Bash传递多个数组到Python脚本的解决方案
我来帮你搞定这个问题!既然你已经能成功传递单个数组,那多个数组的传递其实是思路的延伸,下面给你两种亲测有效的实现方式,你可以根据自己的需求选择:
方案一:用分隔符区分多个数组
这个方法适合数组数量不固定的场景,核心是用一个不会出现在数组元素里的特殊字符串当分隔标记,把多个数组拼接成一个参数列表传给Python,再在Python里拆分回独立数组。
Bash 脚本示例
#!/bin/bash # 定义几个测试数组(元素带空格也没问题) fruits=("apple pie" "banana" "cherry tart") colors=("red" "bright yellow" "dark green") quantities=("10" "25" "15") # 用---作为数组分隔符,把所有数组依次传给Python脚本 python3 your_script.py "${fruits[@]}" "---" "${colors[@]}" "---" "${quantities[@]}"
Python 脚本示例
import sys def split_into_arrays(args, separator="---"): """把带分隔符的参数列表拆分成多个数组""" arrays = [] current = [] for arg in args: if arg == separator: arrays.append(current) current = [] else: current.append(arg) # 别忘了把最后一组元素加进去 if current: arrays.append(current) return arrays if __name__ == "__main__": # 去掉脚本本身的名字,只处理传入的参数 input_args = sys.argv[1:] arrays = split_into_arrays(input_args) # 验证结果 print("水果数组:", arrays[0]) print("颜色数组:", arrays[1]) print("数量数组:", arrays[2])
方案二:用argparse明确指定每个数组参数
如果你的数组数量固定,用argparse给每个数组单独设置参数会更清晰,可读性更强。
Bash 脚本示例
#!/bin/bash fruits=("apple" "banana" "cherry") colors=("red" "yellow" "green") # 用--fruits、--colors这样的参数名传递每个数组 python3 your_script.py --fruits "${fruits[@]}" --colors "${colors[@]}"
Python 脚本示例
import argparse if __name__ == "__main__": parser = argparse.ArgumentParser(description='接收多个字符串数组') # nargs='+'表示该参数接收一个或多个元素,自动组成列表 parser.add_argument('--fruits', nargs='+', help='水果名称数组') parser.add_argument('--colors', nargs='+', help='对应颜色数组') args = parser.parse_args() # 输出结果 print("水果列表:", args.fruits) print("颜色列表:", args.colors)
关键注意点
- 一定要用
"${array[@]}"的格式传递数组,这样能保留数组元素中的空格(比如"apple pie"这种带空格的元素不会被拆成两个参数)。 - 方案一中的分隔符要选绝对不会出现在你数组元素里的字符串,比如如果你的元素里可能出现
---,就换成###或者其他特殊标记。
内容的提问来源于stack exchange,提问作者lanadaquenada
相关产品推荐
相关产品推荐

