python多程式檢查埠並寫日誌

神棍先生發表於2017-08-25

版權宣告:本文可能為博主原創文章,若標明出處可隨便轉載。 https://blog.csdn.net/Jailman/article/details/77573916

#!C:Python27python.exe
#coding: utf-8

from multiprocessing import Pool
import socket
socket.setdefaulttimeout(10)


#################################################################
import ctypes

STD_INPUT_HANDLE = -10
STD_OUTPUT_HANDLE = -11
STD_ERROR_HANDLE = -12

FOREGROUND_BLACK = 0x0
FOREGROUND_BLUE = 0x01  # text color contains blue.
FOREGROUND_GREEN = 0x02  # text color contains green.
FOREGROUND_RED = 0x04  # text color contains red.
FOREGROUND_INTENSITY = 0x08  # text color is intensified.

BACKGROUND_BLUE = 0x10  # background color contains blue.
BACKGROUND_GREEN = 0x20  # background color contains green.
BACKGROUND_RED = 0x40  # background color contains red.
BACKGROUND_INTENSITY = 0x80  # background color is intensified.


class Color:
    ````` See http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winprog/winprog/windows_api_reference.asp
    for information on Windows APIs.```
    std_out_handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)

    def set_cmd_color(self, color, handle=std_out_handle):
        """(color) -> bit
        Example: set_cmd_color(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY)
        """
        bool = ctypes.windll.kernel32.SetConsoleTextAttribute(handle, color)
        return bool

    def reset_color(self):
        self.set_cmd_color(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE)

    def print_red_text(self, print_text):
        self.set_cmd_color(FOREGROUND_RED | FOREGROUND_INTENSITY)
        print print_text
        self.reset_color()

    def print_green_text(self, print_text):
        self.set_cmd_color(FOREGROUND_GREEN | FOREGROUND_INTENSITY)
        print print_text
        self.reset_color()

    def print_blue_text(self, print_text):
        self.set_cmd_color(FOREGROUND_BLUE | FOREGROUND_INTENSITY)
        print print_text
        self.reset_color()

    def print_red_text_with_blue_bg(self, print_text):
        self.set_cmd_color(FOREGROUND_RED | FOREGROUND_INTENSITY | BACKGROUND_BLUE | BACKGROUND_INTENSITY)
        print print_text
        self.reset_color()

clr = Color()
# clr.print_red_text(`red`)
# clr.print_green_text(`green`)
# clr.print_blue_text(`blue`)
# clr.print_red_text_with_blue_bg(`background`)
#################################################################

def check_server(address, port):
    s = socket.socket()
    # print "Attempting to connect to %s on port %s" % (address, port)
    try:
        port = int(port)
        s.connect((address, port))
        # print "Connected to %s on port %s" % (address, port)
        return True
    except socket.error, e:
        clr.print_red_text("Connection to %s on port %s failed: %s" % (address, port, e))
        return False


def single_func(i):
    with open(`proxy.txt`) as f:
        lines = f.readlines()
        if lines[i] != ``:
            ip = lines[i].split(`:`)[0].strip()
            port = lines[i].split(`:`)[1].strip()
            if check_server(ip, port):
                msg = "Connected to %s on port %s" % (ip, port)
                clr.print_green_text(msg)
                return msg
            else:
                return "Connection to %s on port %s failed" % (ip, port)
        else:
            msg = "Empty line!"
            return msg
    # f.close()


def logger(msg):
    with open(`log.txt`, `a+`) as f:
        f.write(str(msg) + "
")
        f.flush()


if __name__ == `__main__`:
    try:
        pool = Pool(processes=4)
        with open(`proxy.txt`) as f:
            lines = f.readlines()
            for i in range(1, lines.__len__() + 1):
                result = pool.apply_async(single_func, (i,), callback=logger).get(99999)
            pool.close()
            pool.join()
            # f.close()
    except KeyboardInterrupt as e:
        clr.print_red_text("Interrupt Reason: %s" % str(e))




相關文章