在Python中轻松创建Bash脚本

4

我希望编写一些测试来创建和执行bash脚本。Bash本身有一个很好的方法来实现这一点:

 % cat > run.sh << EOF
 > echo "I ran this"
 > EOF
 % . run.sh
 I ran this

在Python中我可以这样做:

 with open ('run.sh', 'w') as rsh:
    rsh.write('echo "I ran this"\n')
 -- etc ---

这对于Python中的短脚本很好,但我想知道是否有一些我不知道的技巧,让我做一些类似于bash的操作。


4
三重引号字符串字面值? - user202729
糟糕!我忘记了。 - Ray Salemi
2个回答

15

你可以做到这一点

#! /usr/bin/env python

with open ('run.sh', 'w') as rsh:
    rsh.write('''\
#! /bin/bash
echo "I ran this"
echo "more lines"
''')

谢谢。我忘记了这个。 - Ray Salemi
1
主要是样式问题,但我不会费心去使用反斜杠。bash脚本不会在脚本开头的空行上关注。 - chepner
1
我仍然会在第一行放置shebang以避免反斜杠,因为它与其余内容(语义上)无关。 (实际上,如果我对测试运行器有任何控制权,我可能根本不会放置shebang,因为它将使用显式shell运行命令,而不是假定测试脚本是可执行的。) - chepner
'''\ 开始多行字符串是惯用的方法。我不明白为什么这会有风格问题。 - Kos
可能您还想将该脚本变成可执行文件:f = Path('run_mlm_loop.sh') f.chmod(f.stat().st_mode | stat.S_IEXEC) - James Hirschorn
显示剩余2条评论

0
你可以在这里使用writelines:
with open ('run.sh', 'w') as rsh:
    rsh.writelines('echo "I ran this"\n')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接