検索

ホームページ  >  に質問  >  本文

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日前492

全員に返信(3)返信します

  • 怪我咯

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

    上記の答えで十分です。文字列テンプレートを使用するか、次の表現の方がわかりやすいです:

    リーリー

    返事
    0
  • PHP中文网

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

    リーリー

    返事
    0
  • PHPz

    PHPz2017-04-18 09:31:12

    まず、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 などの正規表現を使用して一致させることをお勧めします。 リーリー

    返事
    0
  • キャンセル返事