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

如何将Python变量传入bash命令?多命令场景实现方案问询

解决Python中向bash命令传入变量的问题

方法1:使用Python字符串格式化(注意转义和安全)

如果bash代码结构固定,可通过Python字符串格式化替换变量,但要确保context['nickname']是可信输入,避免命令注入风险。示例如下:

nickname = context['nickname']
bash_code = r'''
echo "/common_home/{nickname}  /tmp/back/{nickname}  none bind 0 0" | sudo tee --append /etc/fstab
sudo mkdir /tmp/{nickname}  /tmp/back/{nickname}
'''.format(nickname=nickname)
subprocess.run(['bash', '-c', bash_code], stdout=subprocess.PIPE, stderr=subprocess.PIPE)

也可使用f-string(若bash代码中无其他需转义的大括号):

nickname = context['nickname']
bash_code = f'''
echo "/common_home/{nickname}  /tmp/back/{nickname}  none bind 0 0" | sudo tee --append /etc/fstab
sudo mkdir /tmp/{nickname}  /tmp/back/{nickname}
'''
subprocess.run(['bash', '-c', bash_code], stdout=subprocess.PIPE, stderr=subprocess.PIPE)

方法2:通过环境变量传递(更安全)

将Python变量存入环境变量,让bash脚本读取,能规避大部分命令注入问题,适合处理不可信输入:

import os
import subprocess

nickname = context['nickname']
env = os.environ.copy()
env['NICKNAME'] = nickname

bash_code = r'''
echo "/common_home/$NICKNAME  /tmp/back/$NICKNAME  none bind 0 0" | sudo tee --append /etc/fstab
sudo mkdir /tmp/$NICKNAME  /tmp/back/$NICKNAME
'''
# sudo默认会重置环境变量,需加-E参数保留自定义环境变量
subprocess.run(['sudo', '-E', 'bash', '-c', bash_code], env=env, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

方法3:用Python替代部分bash命令(更可控)

无需把所有操作交给bash,比如目录创建可直接用Python实现,减少bash代码复杂度:

import os
import subprocess

nickname = context['nickname']
# 用Python创建目录,exist_ok=True避免已存在时报错
os.makedirs(f'/tmp/{nickname}', exist_ok=True)
os.makedirs(f'/tmp/back/{nickname}', exist_ok=True)

# 处理fstab写入操作
fstab_line = f"/common_home/{nickname}  /tmp/back/{nickname}  none bind 0 0\n"
subprocess.run(['sudo', 'tee', '--append', '/etc/fstab'], input=fstab_line.encode(), stdout=subprocess.PIPE, stderr=subprocess.PIPE)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 22:48:51