Python写.sh脚本,换行符\n导致脚本无法正确解析

Python write .sh script, newline character \n causes script to not be parsed correctly

下面的 Python 代码正在创建一个大型 shell 脚本。

我想使用 \n 字符换行以使脚本看起来干净,但 \n 似乎导致 shell 看不到第一行。

如果我在 textpad 或 SublimeText 中编辑脚本,它可以删除 \n's 并且脚本运行正常。我知道 \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()

您可以使用 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')