如何在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
相关产品推荐
相关产品推荐

