def stop_GotoX(): if GotoX_app is None: logging.warning('GotoX 进程还未开始。') else: retcode = GotoX_app.poll() if retcode is None: GotoX_app.terminate() else: logging.warning('GotoX 进程已经结束,code:%s。', retcode)
def dns_remote_resolve(qname, dnsservers, blacklist, timeout): """ http://gfwrev.blogspot.com/2009/11/gfwdns.html http://zh.wikipedia.org/wiki/域名服务器缓存污染 http://support.microsoft.com/kb/241352 """ query = dnslib.DNSRecord(q=dnslib.DNSQuestion(qname)) query_data = query.pack() dns_v4_servers = [x for x in dnsservers if isipv4(x)] dns_v6_servers = [x for x in dnsservers if isipv6(x)] sock_v4 = sock_v6 = None socks = [] if dns_v4_servers: sock_v4 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) socks.append(sock_v4) if dns_v6_servers: sock_v6 = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM) socks.append(sock_v6) timeout_at = time() + timeout try: for _ in xrange(2): try: for dnsserver in dns_v4_servers: sock_v4.sendto(query_data, (dnsserver, 53)) for dnsserver in dns_v6_servers: sock_v6.sendto(query_data, (dnsserver, 53)) while time() < timeout_at: ins, _, _ = select(socks, [], [], 0.1) for sock in ins: reply_data, _ = sock.recvfrom(512) reply = dnslib.DNSRecord.parse(reply_data) iplist = [ str(x.rdata) for x in reply.rr if x.rtype == 1 ] if any(x in blacklist for x in iplist): logging.warning( 'query qname=%r reply bad iplist=%r', qname, iplist) else: logging.debug('query qname=%r reply iplist=%s', qname, iplist) return iplist except socket.error as e: logging.warning('handle dns query=%s socket: %r', query, e) finally: for sock in socks: sock.close()
if os.path.dirname(sys.executable) != py_dir: import glob #优先导入当前运行 py 已安装模块 sys.path.append(packages) sys.path.extend(glob.glob('%s/*.egg' % packages)) try: import gevent import gevent.monkey gevent.monkey.patch_all(os=False, signal=False, subprocess=False, Event=True) except ImportError: logging.warning( '无法找到 gevent,请安装 gevent-1.0.0 以上版本,或将相应 .egg 放到 %r 文件夹!\n正在退出……', packages) sys.exit(-1) except TypeError: gevent.monkey.patch_all(os=False) logging.warning('警告:请更新 gevent 至 1.0.0 以上版本!') try: import OpenSSL except ImportError: logging.exception( '无法找到 pyOpenSSL,请安装 pyOpenSSL-16.0.0 以上版本,或将相应 .egg 放到 %r 文件夹!\n正在退出……', packages) sys.exit(-1) from local.compat import thread
import gevent import gevent.monkey gevent.monkey.patch_all(os=False, signal=False, subprocess=False, Event=True) except ImportError: wait_exit( '无法找到 gevent 或者与 Python 版本不匹配,请安装 gevent-1.0.0 ' '以上版本,或将相应 .egg 放到 %r 文件夹!', packages, exc_info=True) except TypeError: gevent.monkey.patch_all(os=False) from local import clogging as logging logging.warning('警告:请更新 gevent 至 1.0.0 以上版本!') from local import clogging as logging logging.replace_logging() logging.addLevelName(15, 'TEST', logging.COLORS.GREEN) try: import OpenSSL except ImportError: wait_exit( '无法找到 pyOpenSSL,请安装 pyOpenSSL-16.0.0 以上版本,' '或将相应 .egg 放到 %r 文件夹!', packages, exc_info=True)