本菜鸟有一个可以获取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语句,会报语法错误。
请问遇到这样的情况怎么破?肯定各位大大指点。
PHPz2017-04-18 09:31:12
まず、get_local_ip
関数に問題があり、ローカルの IP
アドレスを正常に取得できません。
http://stackoverflow で解決策を参照することをお勧めします。 .com/ques...
また、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
などの正規表現を使用して一致させることをお勧めします。
リーリー