python sys.stdin.read() 不需要的拆分
python sys.stdin.read() unwanted split
我正在尝试制作一个脚本,我可以通过管道将 IP 地址传输到该脚本并使其成为 return geoip 位置。当我尝试这个时,它看起来像是一次将每个 IP 地址拆分为 1 个字符,并且在尝试 运行 iplookup()
时失败
#!/usr/bin/env python
import sys
from geoip import geolite2
def iplookup(srcip):
for ip in srcip:
print(ip)
try:
print(geolite2.lookup(ip))
except:
print("oops")
pass
source = sys.stdin.read()
iplookup(source)
回显一个数据样本(以后我想从tail -f fast.log)命令只提取IP地址
[root@suricata py]# echo "05/20/2015-15:57:34.607470 [**] [1:2020702:2] ET DOS Bittorrent User-Agent inbound - possible DDOS [**] [Classification: Attempted Denial of Service] [Priority: 2] {TCP} 8.8.8.8:2039 -> 1.1.1.1:80" | grep -oE '((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])' | python mygeoip.py
8
oops
.
oops
8
oops
.
oops
8
oops
.
oops
8
oops
等...
当您调用 iplookup("whosebug.com")
时,您的 python 函数将完全按照您的指示执行操作,即遍历输入数组的元素。您的 for
循环告诉 python 遍历列表。
python中的字符串是一个字符列表。
所以要么不要这样做(终止循环),要么通过 iplookup((source,))
或 iplookup([source])
.
调用您的函数
sys.stdin.read() 给你一个字符串,如果你有逗号分隔的 IP 地址,做这样的事情
source = sys.stdin.read()
for ip in source.split(","):
print(geolite2.lookup(ip))
我正在尝试制作一个脚本,我可以通过管道将 IP 地址传输到该脚本并使其成为 return geoip 位置。当我尝试这个时,它看起来像是一次将每个 IP 地址拆分为 1 个字符,并且在尝试 运行 iplookup()
时失败#!/usr/bin/env python
import sys
from geoip import geolite2
def iplookup(srcip):
for ip in srcip:
print(ip)
try:
print(geolite2.lookup(ip))
except:
print("oops")
pass
source = sys.stdin.read()
iplookup(source)
回显一个数据样本(以后我想从tail -f fast.log)命令只提取IP地址
[root@suricata py]# echo "05/20/2015-15:57:34.607470 [**] [1:2020702:2] ET DOS Bittorrent User-Agent inbound - possible DDOS [**] [Classification: Attempted Denial of Service] [Priority: 2] {TCP} 8.8.8.8:2039 -> 1.1.1.1:80" | grep -oE '((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])' | python mygeoip.py
8
oops
.
oops
8
oops
.
oops
8
oops
.
oops
8
oops
等...
当您调用 iplookup("whosebug.com")
时,您的 python 函数将完全按照您的指示执行操作,即遍历输入数组的元素。您的 for
循环告诉 python 遍历列表。
python中的字符串是一个字符列表。
所以要么不要这样做(终止循环),要么通过 iplookup((source,))
或 iplookup([source])
.
sys.stdin.read() 给你一个字符串,如果你有逗号分隔的 IP 地址,做这样的事情
source = sys.stdin.read()
for ip in source.split(","):
print(geolite2.lookup(ip))