本菜鸟有一个可以获取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语句,会报语法错误。
请问遇到这样的情况怎么破?肯定各位大大指点。
위 답변이면 충분합니다. 문자열 템플릿을 사용하거나 다음 표현이 더 친숙합니다.
으아악으아악
우선
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
과 같은 정규식을 사용하여 일치시키는 것이 가장 좋습니다. 으아악