python脚本里执行linux命令的时候如何调用python的函数?
高洛峰
高洛峰 2017-04-18 09:29:12
0
3
483

本菜鸟有一个可以获取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语句,会报语法错误。

请问遇到这样的情况怎么破?肯定各位大大指点。

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

모든 응답(3)
刘奇

위 답변이면 충분합니다. 문자열 템플릿을 사용하거나 다음 표현이 더 친숙합니다.

으아악
Ty80

으아악

PHPzhong

우선 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과 같은 정규식을 사용하여 일치시키는 것이 가장 좋습니다. 으아악

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿