linux调用python函数,python脚本里执行linux命令的时候如何调用python的函数?
本菜鳥有一個可以獲取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()
現(xiàn)在有一個任務(wù),就是在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()是一個函數(shù)啊,函數(shù)無法直接套用到上面那個sed語句,會報語法錯誤。
請問遇到這樣的情況怎么破?肯定各位大大指點。
上面的回答就可以,使用string模板就可以了,或者這樣子的表達方式更友好:
os.system("sed -i s/RELAY_AGENT_IP =/RELAY_AGENT_IP = {}/ relay.conf".format(get_local_ip()))
os.system("sed -i s/RELAY_AGENT_IP =/RELAY_AGENT_IP = %s/ relay.conf"%(get_local_ip()))
首先你這個
get_local_ip
函數(shù)有問題, 并不能正常獲取到本地
IP
地址, 建議看下這里的解決方法:
http://stackoverflow.com/ques…
還有你這個
sed
用的也不對啊, 語法有問題(缺了雙引號), 應(yīng)該是這樣
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 = 天安門上太陽升
總結(jié)
以上是生活随笔為你收集整理的linux调用python函数,python脚本里执行linux命令的时候如何调用python的函数?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 根据 中华人民共和国保守国家秘密法 军事
- 下一篇: linux查看teamview是否运行,