创建设备组合文件

时间:2016-10-04 18:55:48

标签: python

我尝试使用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

有人可以帮助找到我做错的事。 感谢

2 个答案:

答案 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问题。