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

如何在Python中实现类Bash的Here Document方式创建Bash脚本?

在Python中模拟Bash Here-Doc风格编写脚本

嘿,这个需求太贴合实际了!我完全懂你不想在Python里用一堆\n拼接脚本内容的痛苦——Bash里用EOF写多行脚本的方式确实清爽太多了。好在Python里也有几种类似的技巧,能让你写出同样直观的代码:

1. 最直接的替代:三重引号多行字符串

这是最接近Bash Here-Doc体验的方法,用三重单引号或双引号包裹多行内容,直接写脚本就行,不用手动加换行符:

with open('run.sh', 'w') as rsh:
    rsh.write('''echo "I ran this"
echo "This is a second line in the script"
# 还能直接加Shell注释,和写Bash脚本一模一样
ls -la
''')

执行脚本的话,用Python的subprocess模块就能模拟Bash里的. run.sh:

import subprocess
# 执行脚本并捕获输出
output = subprocess.run(['bash', 'run.sh'], capture_output=True, text=True).stdout
print(output)

2. 处理缩进:用textwrap.dedent保持代码整洁

如果你的脚本内容是在Python函数或缩进块里写的,直接用三重引号会带多余的缩进,这时候textwrap.dedent就能帮你自动去掉每行开头的共同空白:

from textwrap import dedent

def generate_script():
    with open('run.sh', 'w') as rsh:
        # 前面的\是为了去掉第一行的空行,让脚本内容更干净
        script_content = dedent('''\
            echo "I ran this"
            echo "这行在Python里是缩进的,但生成的脚本里不会有"
            echo "Perfect for keeping Python代码的缩进规范"
        ''')
        rsh.write(script_content)

这样生成的run.sh里每行都没有多余的缩进,和你直接在Bash里写的一样。

3. 更简洁的文件写入:用pathlib(Python 3.4+)

如果你不想写with open的上下文,pathlib模块能让你一行完成文件写入,配合三重引号同样丝滑:

from pathlib import Path

# 直接写入多行内容到文件
Path('run.sh').write_text('''echo "Hello from Python"
echo "This is even simpler!"
''')

这些方法都能完美替代你原来的逐行write写法,让编写Shell脚本的过程和Bash里一样流畅~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:28:46