如何让Bash脚本接收Python脚本传入的参数?
在Python中调用交互式Bash脚本并传递输入参数
作为Python新手,要实现调用交互式Bash脚本并传递输入的需求,这里有两种实用的解决方案,你可以根据是否能修改原Bash脚本选择合适的方式:
方案一:直接调用原交互式脚本(不修改Bash代码)
原Bash脚本通过read命令交互式读取输入,我们需要在Python中把要传递的参数通过标准输入(stdin)发送给它。Python的subprocess模块可以轻松实现这个功能:
步骤1:确保Bash脚本有执行权限
先在终端给你的脚本添加执行权限:
chmod +x your_script.sh
步骤2:Python调用代码
import subprocess # 定义要传递的参数(你可以改成用户输入或者其他来源) username = "john_doe" first_name = "John" last_name = "Doe" # 构造输入内容:每个参数对应一行,因为`read`命令按行读取输入 input_content = f"{username}\n{first_name}\n{last_name}\n" # 启动Bash脚本进程,开启管道用于交互 script_process = subprocess.Popen( ["./your_script.sh"], stdin=subprocess.PIPE, # 允许向脚本输入数据 stdout=subprocess.PIPE, # 捕获脚本输出 stderr=subprocess.PIPE, # 捕获错误信息 text=True # 使用文本模式,直接处理字符串而非字节 ) # 发送输入并获取脚本的输出和错误 output, error = script_process.communicate(input=input_content) # 打印结果 print("脚本执行结果:") print(output.strip()) # 如果有错误信息,打印出来 if error: print("\n错误信息:") print(error.strip())
关键说明:
subprocess.Popen用于创建子进程,stdin=subprocess.PIPE让我们可以向脚本的标准输入写入数据communicate()方法会发送输入内容,同时等待脚本执行完成并返回输出和错误text=True参数简化了字符串和字节之间的转换,不用手动编码解码
方案二:修改Bash脚本为命令行参数模式(更推荐)
如果可以修改原Bash脚本,把它改成接受命令行参数的形式,会让Python调用更简洁可靠,避免交互式输入的潜在问题:
步骤1:修改Bash脚本
把原脚本改成通过位置参数获取输入:
#!/bin/sh # 从命令行参数中获取值 username="$1" first="$2" last="$3" echo "$username", "$first", "$last"
步骤2:Python调用代码
import subprocess # 定义要传递的参数 username = "john_doe" first_name = "John" last_name = "Doe" # 直接把参数作为命令行参数传递给脚本 result = subprocess.run( ["./your_script_modified.sh", username, first_name, last_name], capture_output=True, text=True ) # 打印输出 print("脚本执行结果:") print(result.stdout.strip()) # 检查错误 if result.stderr: print("\n错误信息:") print(result.stderr.strip())
为什么推荐这种方式?
- 命令行参数的传递更直观,不容易出现输入顺序、换行符处理等问题
- 脚本的复用性更强,既可以通过命令行直接调用,也可以被Python等程序调用
内容的提问来源于stack exchange,提问作者Anirudh
相关产品推荐
相关产品推荐

