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

如何让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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:10:06