本菜鸟有一个可以获取ip地址的脚本,如下:
def get_local_ip(ifname = 'eth1'):
import socket, fcntl, struct
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
inet = fcntl.ioctl(s.fileno(), 0x8915, struct.pack('256s', ifname[:15]))
ret = socket.inet_ntoa(inet[20:24])
return ret
print get_local_ip()
现在有一个任务,就是在linux里把一个relay.conf文件里的“RELAY_AGENT_IP = ”替换成“RELAY_AGENT_IP = 当前IP地址”,这个用sed语句很好解决:os.system("sed -i s/RELAY_AGENT_IP =/RELAY_AGENT_IP = 当前IP地址/ relay.conf")即可,但是get_local_ip()是一个函数啊,函数无法直接套用到上面那个sed语句,会报语法错误。
请问遇到这样的情况怎么破?肯定各位大大指点。
怪我咯2017-04-18 09:31:12
上面的回答就可以,使用string模板就可以了,或者這樣子的表達方式更友善:
os.system("sed -i s/RELAY_AGENT_IP =/RELAY_AGENT_IP = {}/ relay.conf".format(get_local_ip()))
PHPz2017-04-18 09:31:12
首先你這個get_local_ip
函数有问题, 并不能正常获取到本地IP
地址, 建議看下這裡的解決方法:
http://stackoverflow.com/ques...
還有你這個sed
用的也不對啊, 語法有問題(缺了雙引號), 應該是這樣sed
用的也不对啊, 语法有问题(缺了双引号), 应该是这样sed -i "s/RELAY_AGENT_IP =/RELAY_AGENT_IP = 当前IP地址/" relay.conf
而且这条命令只能是把RELAY_AGENT_IP =
这个替换成RELAY_AGENT_IP = 当前IP地址
而已, 如果你的relay.conf
文件这一行原本就有IP地址值呢?比如这样RELAY_AGENT_IP = 1.2.3.4
照你这个命令替换完是这个样子RELAY_AGENT_IP = 当前IP地址1.2.3.4
, 为了有一定的错误格式容忍度, 最好用正则来匹配, 比如sed -i "s/^RELAY_AGENT_IP.*/RELAY_AGENT_IP = 我爱北京天安门/" relay.conf
sed -i "s/RELAY_AGENT_IP =/RELAY_AGENT_IP = 當前IP位址/" relay.conf
RELAY_AGENT_IP =
這個替換成RELAY_AGENT_IP = 目前IP位址
而已, 如果你的relay.conf
檔案這一行原本就有IP位址值呢?例如這樣RELAY_AGENT_IP = 1.2.3.4
照你這個指令替換完是這個樣子RELAY_AGENT_IP = 目前IP位址1.2.3.4
, 為了有一定的錯誤格式容忍度, 最好用正則來匹配, 例如🎜sed -i "s/^RELAY_AGENT_IP.*/RELAY_AGENT_IP = 我愛北京天安門/" relay. conf
🎜
$ cat relay.conf
RELAY_AGENT_IP = 我爱北京天安门
$ sed "s/^RELAY_AGENT_IP.*/RELAY_AGENT_IP = 天安门上太阳升/" relay.conf
RELAY_AGENT_IP = 天安门上太阳升