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

如何在Python的subprocess.call中为Bash脚本传入变量

解决方案

首先得提醒你,在Python 2.7里别用input()获取用户输入——它会把输入内容当作Python代码执行,存在安全风险,换成raw_input()才是获取字符串输入的正确方式。

接下来要把Python变量作为参数传递给test.sh,只需要在subprocess.call()的参数列表里,按命令行的顺序依次添加选项和对应的变量值就行,这样能保证带空格的输入(比如用户输入"Los Angeles"作为城市)被正确识别为单个参数。

修改后的完整代码如下:

import subprocess

# 安全获取用户输入
name = raw_input("What is your name? ")
age = raw_input("What is your age? ")
city = raw_input("What is your city? ")

# 构造调用命令的参数列表,对应终端执行:./test.sh -a "name值" -b "age值" -c "city值"
subprocess.call([
    'sh', './test.sh',
    '-a', name,
    '-b', age,
    '-c', city
])

补充说明

  • subprocess.call()的参数列表会自动帮你处理参数的引号问题,不用手动给变量加引号,避免了拼接字符串时可能出现的语法错误和安全问题。
  • 如果硬要使用input()(非常不推荐),在用户输入普通字符串时也能运行,但如果有人输入恶意代码(比如"__import__('os').system('rm -rf /')"),会直接执行,风险极高,所以务必优先用raw_input()。

内容的提问来源于stack exchange,提问作者Armaan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:10:01