尝试使用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''
答案 0 :(得分:3)
可能没有在您运行的主机上安装Curl。你无论如何都不需要它,因为你可以在Python中轻松地完成这个:
import urllib2
u = urllib2.urlopen('http://checkip.dyndns.org')
line = u.next()
print line.split("<")[6].split().pop()
答案 1 :(得分: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()
答案 2 :(得分: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)
答案 3 :(得分:1)
纯python实现是
import requests
r = requests.get('http://ipof.in/txt')
myip = r.text
多数民众赞成。如果您需要除IP地址之外的更多信息,请查看http://ipof.in