如何在Bash中为多个Python脚本指定输入参数(含screener_beta1场景)
嘿,这个场景我之前实操过,给你几种实用的方案来搞定在Bash环境中给多个Python脚本指定对应输入的需求:
分情况处理:根据脚本接收输入的方式选择方法
首先得明确你的Python脚本是通过命令行参数接收输入(比如用sys.argv),还是运行过程中交互式弹窗要求输入(比如用input()函数),两种情况的处理方式不同:
情况1:脚本通过命令行参数接收输入
如果你的screener_beta1.py是基于命令行参数编写的,比如:
import sys # 接收3个命令行参数 arg1 = sys.argv[1] arg2 = sys.argv[2] arg3 = sys.argv[3] print(f"获取到参数:{arg1}, {arg2}, {arg3}")
那在Bash里直接把参数跟在脚本后面就行,多个脚本依次执行的话:
# 单独运行screener_beta1,传入3个参数 python3 screener_beta1.py 2024-01-01 1000 tech # 批量运行多个脚本,每个脚本带自己的参数 # 用&&表示前一个脚本成功执行才会运行下一个;用;则不管前一个结果都执行 python3 script_a.py apple banana && python3 screener_beta1.py 2024-01-01 1000 tech && python3 script_b.py 123
情况2:脚本是交互式要求输入
如果screener_beta1.py是运行时弹出提示让用户输入,比如:
arg1 = input("请输入日期:") arg2 = input("请输入阈值:") arg3 = input("请输入行业:") print(f"获取到输入:{arg1}, {arg2}, {arg3}")
这种情况需要把预设的输入内容“喂”给脚本,推荐两种方式:
方法A:用管道传递多行输入
# 给screener_beta1传入3行输入 echo -e "2024-01-01\n1000\ntech" | python3 screener_beta1.py # 多个脚本依次处理 echo -e "red\nbule" | python3 script_a.py ; echo -e "2024-01-01\n1000\ntech" | python3 screener_beta1.py
echo -e用来解析换行符\n,每一行对应脚本的一次输入请求。
方法B:用Here-Document(可读性更强)
这种方式适合输入内容较多或有特殊字符的场景,看起来更直观:
# 运行screener_beta1并提供输入 python3 screener_beta1.py << EOF 2024-01-01 1000 tech EOF # 批量运行多个脚本,每个脚本对应自己的输入块 python3 script_a.py << EOF red blue EOF python3 screener_beta1.py << EOF 2024-01-01 1000 tech EOF
进阶:把批量运行逻辑写成Bash脚本
如果需要频繁执行这些脚本,可以把所有步骤写到一个可执行的Bash脚本里,比如run_all_scripts.sh:
#!/bin/bash echo "开始运行第一个脚本..." python3 script_a.py apple banana echo "开始运行screener_beta1..." python3 screener_beta1.py << EOF 2024-01-01 1000 tech EOF echo "开始运行最后一个脚本..." python3 script_b.py 123
然后给脚本添加执行权限:
chmod +x run_all_scripts.sh
之后直接运行就能批量处理所有脚本:
./run_all_scripts.sh
内容的提问来源于stack exchange,提问作者JOHN
相关产品推荐
相关产品推荐

