recherche

Maison  >  Questions et réponses  >  le corps du texte

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()

现在有一个任务,就是在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语句,会报语法错误。

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

高洛峰高洛峰2889 Il y a quelques jours488

répondre à tous(3)je répondrai

  • 怪我咯

    怪我咯2017-04-18 09:31:12

    La réponse ci-dessus suffit, utilisez simplement le modèle de chaîne, ou cette expression est plus conviviale :

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

    répondre
    0
  • PHP中文网

    PHP中文网2017-04-18 09:31:12

    os.system("sed -i s/RELAY_AGENT_IP =/RELAY_AGENT_IP = %s/ relay.conf"%(get_local_ip()))

    répondre
    0
  • PHPz

    PHPz2017-04-18 09:31:12

    Tout d'abord, il y a un problème avec votre fonction get_local_ip, et l'adresse IP locale ne peut pas être obtenue normalement. Il est recommandé de jeter un œil à la solution ici :
    http://stackoverflow. .com/ques...

    De plus, vous n'utilisez pas sed de manière incorrecte. Il y a un problème de syntaxe (guillemets doubles manquants), cela devrait être comme ceci
    sed -i "s/RELAY_AGENT_IP =/RELAY_AGENT_IP = 当前IP地址/" relay.conf
    et cette commande ne peut être que
    RELAY_AGENT_IP =. Remplacez simplement ceci par RELAY_AGENT_IP = 当前IP地址. Et si cette ligne de votre fichier relay.conf avait à l'origine une valeur d'adresse IP, RELAY_AGENT_IP = 1.2.3.4 après l'avoir remplacée par votre commande, elle ressemblera à ceci RELAY_AGENT_IP = 当前IP地址1.2.3.4, afin de Pour éviter certaines erreurs de tolérance de format, il est préférable d'utiliser des expressions régulières pour correspondre, telles que
    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 = 天安门上太阳升

    répondre
    0
  • Annulerrépondre