Python 编写 .sh 脚本 - \n 导致脚本无法解析

时间:2021-05-31 14:11:29

标签: python shell sh write

我有下面的 python 代码,它正在创建一个大型 shell 脚本。我想使用 \n 来创建一个新行以保持脚本看起来干净,但 \n 似乎导致外壳看不到第一行。如果我在 textpad/sublime 中编辑脚本,我可以去掉 /n 并且脚本运行良好。我知道 /n 是一个新行,但是有什么方法可以让 python 写入单独的行而不将 /n 附加到末尾

fip6 = open("github_ip6.sh", "w", newline='') 
fip6.write('aws ec2 modify-managed-prefix-list \ ' + '\n')
fip6.write('    --prefix-list-id pl-047XXXXX \ ' + '\n')

for address in actions:
   if not is_ipv4_only(address):
   fip6.write('    --add-entries Cidr=' + address + ',Description=' + address + ' \ ' + '\n')

fip6.write("    --current-version 1")
fip6.close()

1 个答案:

答案 0 :(得分:1)

您可以使用 printfile 关键字参数:

with open("github_ip6.sh", "w") as fip6:
    print('aws ec2 modify-managed-prefix-list \\', file=fip6)
    print('    --prefix-list-id pl047XXXXX \\', file=fip6)
    for address in actions:
        if not is_ipv4_only(address):
            print(f'    --add-entries Cidr={address}, Description={address} \\', file=fip6)
    print('    --current-version 1', file=fip6)

您还可以使用 contextlib 中的上下文管理器将 sys.stdout 临时替换为您的输出文件。

from contextlib import redirect_stdout

with open("github_ip6.sh", "w") as fip6:
    with redirect_stdout(fip6):
        print('aws ec2 modify-managed-prefix-list \\')
        print('    --prefix-list-id pl047XXXXX \\')
        for address in actions:
            if not is_ipv4_only(address):
                print(f'    --add-entries Cidr={address}, Description={address} \\')
        print('    --current-version 1')
相关问题