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

本菜鸟有一个可以获取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教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

membalas semua(3)
刘奇

Jawapan di atas sudah memadai, hanya gunakan templat rentetan, atau ungkapan ini lebih mesra:

os.system("sed -i s/RELAY_AGENT_IP =/RELAY_AGENT_IP = {}/ relay.conf".format(get_local_ip()))
Ty80
os.system("sed -i s/RELAY_AGENT_IP =/RELAY_AGENT_IP = %s/ relay.conf"%(get_local_ip()))
PHPzhong

Pertama sekali, terdapat masalah dengan fungsi get_local_ip anda dan ia tidak boleh mendapatkan alamat IP setempat seperti biasa. Adalah disyorkan untuk melihat penyelesaian di sini:
http://stackoverflow.com/. soalan...

Selain itu, anda menggunakan sed dengan tidak betul Terdapat masalah sintaks (kehilangan petikan berganda), ia sepatutnya seperti ini
sed -i "s/RELAY_AGENT_IP =/RELAY_AGENT_IP = 当前IP地址/" relay.conf
dan arahan ini hanya boleh menjadi
RELAY_AGENT_IP =. Gantikan ini dengan RELAY_AGENT_IP = 当前IP地址 Bagaimana jika baris relay.conf anda pada asalnya mempunyai nilai alamat IP Contohnya, RELAY_AGENT_IP = 1.2.3.4 selepas menggantikannya dengan arahan anda, ia akan kelihatan seperti ini RELAY_AGENT_IP = 当前IP地址1.2.3.4, untuk elakkan ralat tertentu Toleransi format, sebaiknya gunakan ungkapan biasa untuk dipadankan, seperti
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 = 天安门上太阳升
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan