我尝试使用python脚本中的用户输入创建一个centos 7网络组合(绑定)。 ç
import socket
# IP Address
IPADDR = socket.gethostbyname(socket.gethostname())
print IPADDR
# Netmask
NETMASK = raw_input("Enter Netmask address: ")
PREFIX = sum([bin(int(x)).count("1") for x in NETMASK.split(".")])
print NETMASK
# Gateway
GATEWAY = raw_input("Enter Gateway address: ")
print GATEWAY
# Run command and substitution
os.system("nmcli con add type team con-name team0 ifname team0 config '{"runner":{"name": "activebackup"}}'")
os.system("nmcli con mod team0 ipv4.addresses IPDDR/PREFIX")
os.system("nmcli con mod team0 ipv4.gateway GATEWAY")
os.system("nmcli con mod team0 connection.autoconnect yes")
os.system("nmcli con mod team0 ipv4.method manual")
os.system("nmcli con mod team0 ipv6.method ignore")
当我运行脚本时,我得到了这个错误:
File "team0.py", line 16
os.system("nmcli con add type team con-name team0 ifname team0 config '{"runner":{"name": "activebackup"}}'")
^
SyntaxError: invalid syntax
有人可以帮助找到我做错的事。 感谢
答案 0 :(得分:2)
当然 - 你终止了字符串,如文字的颜色所示。它从" nmcli 开始。使用一对双引号将它们作为外部字符串中的文字。
os.system("nmcli con add type team con-name team0 ifname team0 config '{""runner"":
......等等。或者,将字典值放入变量中,稍后将其附加到较大的字符串:
my_dict = '{"runner":{"name": "activebackup"}}'
os.system("nmcli con add type team con-name team0 ifname team0 config '"
+ my_dict) + "'"
答案 1 :(得分:2)
发生语法错误,因为您没有转义引用"
个字符。解释器认为字符串已经结束然后跳转。
您可以使用反斜杠\
来转义引号:
os.system("nmcli con add type team con-name team0 ifname team0 config '{\"runner\":{\"name\": \"activebackup\"}}'")
此外,请注意,声明的变量在字符串文字中声明时不会被拾取。您需要使用format
修改这些命令,例如:
os.system("nmcli con mod team0 ipv4.addresses {}/{}".format(IPDDR, PREFIX))
os.system("nmcli con mod team0 ipv4.gateway {}".format(GATEWAY)")
有关如何使用format
的详细信息,请参阅上述文档和其他SO问题。