1

python fabric でホストのパブリック IP アドレスを取得してみる

def publicip():
        ip = local("curl -s 'http://checkip.dyndns.org' | sed 's/.*Current IP Address: \([0-9\.]*\).*/\'\1/g\'")
        print (red(ip))

エラー:

Fatal error: local() encountered an error (return code 2) while executing 'curl -s 'http://checkip.dyndns.org' | sed 's/.*Current IP Address: \([0-9\.]*\).*/'/g''
4

4 に答える 4

3

実行しているホストに Curl がインストールされていない可能性があります。次のようにPythonで簡単に実行できるため、とにかく必要ありません。

import urllib2

u = urllib2.urlopen('http://checkip.dyndns.org')
line = u.next()
print line.split("<")[6].split().pop()
于 2012-07-16T12:17:04.903 に答える
2

local()(外部コマンドを実行しますか?) が何であるかはわかりませんが、requestsライブラリを使用すると、re.searchこれはかなり簡単です:

import requests, re

r = requests.get('http://checkip.dyndns.org')
myip = re.search(r'\d+\.\d+\.\d+\.\d+', r.text).group()
于 2012-07-16T12:16:28.610 に答える
1

local()複数コマンドの実行には対応していないようです。ただし、実行を次のように分割できます。

def publicip():
    ip = local("curl -s 'http://checkip.dyndns.org'", capture=True)

ip には目的の html が含まれます。

'<html><head><title>Current IP Check</title></head><body>Current IP Address: 1.2.3.4</body></html>'

正規表現を使用して解析できるもの、たとえば:

r = re.compile(r'.*\<body>Current IP Address:\s(.*)\</body>.*')
final_ip = r.match(ip).group(1)
于 2012-07-16T12:23:01.020 に答える
1

純粋な python 実装は

import requests
r = requests.get('http://ipof.in/txt')
myip = r.text

それでおしまい。IP アドレス以外の詳細情報が必要な場合は、http://ipof.inをチェックしてください。

于 2016-01-25T17:33:22.313 に答える