批量ping服务器IP脚本(Python)

做IT服务的同学都知道,有时候我们有些的小需求,比如测试某个服务器端口是否连通,测试某台服务器是否正常启动。这种需求一个两个还好,人工即可完成。但是当面临几百个上千个的服务器时就有点力不从心了。美时美刻都要变成痛苦每一刻了。。。

 

最近恰好我也遇到这么个差事,正好之前学习了些Python的基础知识,于是花了一个小时写了这个批量ping服务器IP脚本。使用起来可以说是简单,好用,心里美滋滋~

 

我用的服务器是redhat,可以直接使用已有的Python环境。以下所有文件都在同一目录下即可。

1、创建ip.txt文件,将IP或服务器主机名地址保存在文件中。格式如下:

2、创建ip_status.py脚本文件,ping上述ip或服务器主机名地址,将结果显示在屏幕上并且保存到check.txt。

3、使用chmod 777 ip_status.py将脚本改为可执行模式,使用./ip_status.py 运行脚本,效果如下:

脚本代码如下:

#!/usr/bin/python
import os
import commands
import string

#读取IP或服务器主机名列表

f = open(r”./ip.txt”,’r’)
iplist = f.readlines()
#print iplist
f.close()

print ‘===Start to ping===’

f = open(r”./check.txt”,’wb+’)

 

#生成ping命令并开始ping主机

for ip in iplist:
         command = ‘ping -c 1 ‘ + ip.strip(‘\n’)
         ping_status = commands.getoutput(command + r” |awk ‘/transmitted/ {print $4}'”)  #获取ping输出的最后一行,获取received状态

if(ping_status != ‘0’):
     str1 = ip.strip(‘\n’) + ‘ is ok!\n’
else:
     str1 = ip.strip(‘\n’) + ‘ is unreachable!\n’

print str1
f.write(str1)  #保存

f.close()

以上。

使用Python爬百度贴吧里面的美女图

大学时学过几年编程,毕业后虽然从事IT行业,却一直没有机会写代码。几年工作下来,看到我们公司的码农状态,竟然再也不想编程。算起来一个项目都没有完成过,日后想做码农也做不成了。

最近因为工作需要,跑去做段时间运维。Python作为脚本神器,自然要了解。初学Python,觉得还是找几个小项目练练手比较好。GitHub上“Python 练习册,每天一个小程序”便是我找的一些不错的题目。

于是第 0013 题自然而然的引起我的注意: 用 Python 写一个爬图片的程序,爬这个链接里的日本妹子杉本有美的图片。有了荷尔蒙的刺激,学习动力也提高不少。

先上一下效果图:

Python小程序效果图

程序简单解析如下:

1、使用urllib2打开网页链接,获取网页内容。

request = urllib2.Request(url)
response = urllib2.urlopen(request)
content = response.read()

2、使用正则表达式匹配需要获取的图片。

rule_str = r'src="(.+?\.jpg)"'
rule = re.compile(rule_str)
img_list = rule.findall(content)

3、筛选。

我这里默认需要下载的图片是链接中最多的,因此先计算寻找最多的图片链接的长度。然后将不是此长度的链接排除掉。这里使用了Counter这个函数,对每个链接的长度进行自动排序。

for img in img_list:
    len_temp.append(len(img))  # 计算每个图片链接的长度
most_length = tuple(Counter(len_temp).most_common(1))[0][0]  # 默认需要下载的图片是链接中最多的,寻找最多的图片链接的长度

4、下载图片。

for img in img_list:
    if len(img) != most_length:
        continue  # 不是目标图片,跳出继续
    else:
        pic = urllib2.urlopen(img).read()
        f = open(r"%s\%s%s.jpg" % (file_path, x, random.choice(string.ascii_letters)), "wb+")
        f.write(pic)
        f.close()
        x += 1

5、完整程序如下。

# -*- coding:UTF-8 -*-
import urllib
import urllib2
import re
from collections import Counter
import random
import string


def pic_download(url, file_path):
    # 打开网页
    # url = r'http://tieba.baidu.com/p/2166231880'
    request = urllib2.Request(url)
    response = urllib2.urlopen(request)
    content = response.read()
    # print content

    # 正则表达式
    rule_str = r'src="(.+?\.jpg)"'
    rule = re.compile(rule_str)
    img_list = rule.findall(content)

    print u"正在下载图片..."
    x = 0
    len_temp = []
    for img in img_list:
        len_temp.append(len(img))  # 计算每个图片链接的长度
    most_length = tuple(Counter(len_temp).most_common(1))[0][0]  # 默认需要下载的图片是链接中最多的,寻找最多的图片链接的长度

    for img in img_list:
        if len(img) != most_length:
            continue  # 不是目标图片,跳出继续
        else:
            pic = urllib2.urlopen(img).read()
            f = open(r"%s\%s%s.jpg" % (file_path, x, random.choice(string.ascii_letters)), "wb+")
            f.write(pic)
            f.close()
            x += 1

    print u"%s 张图片已被下载至指定位置" % x

# 主函数
if __name__ == "__main__":
    url = raw_input(r"Please input the BAIDU tieba link:")  # 请输入百度贴吧链接的帖子
    file_path = raw_input(r"Please input the file path(default: C:\Users\Wind\Pictures): ")  # 请输入想要保存图片的位置
    pic_download(url=r'http://tieba.baidu.com/p/1165861759', file_path=r"C:\Users\Wind\Pictures")

 

综上,只要输入百度任意帖子的链接,其中的图片无论是美女还是美景,就全部是你的囊中之物啦。Anyway,Python大法好!最后送上一张美图供大家欣赏~~

杉本有美

原创不易,转载请注明出处。