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()
您可以使用 print
和 file
关键字参数:
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')
下面的 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()
您可以使用 print
和 file
关键字参数:
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')