| 
					
				 | 
			
			
				@@ -1,4 +1,4 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#!/usr/bin/env python 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#!/usr/bin/env python3 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 # -*- coding: utf-8 -*- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import os 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -153,13 +153,13 @@ class watcher_thread(threading.Thread): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         wn = int(config['threadnum']) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if wn > total_num: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             wn = total_num 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        print "There are %d threads working..." % wn 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        print "Press 'Enter' to exit.\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        print("There are %d threads working..." % wn) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        print("Press 'Enter' to exit.\n") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         while True: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if sys.stdin in select.select([sys.stdin], [], [], 0)[0]: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                raw_input() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                print 'Waiting threads to exit...' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                input() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                print("Waiting threads to exit...") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 global running 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 with thread_lock: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     running = False 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -168,11 +168,10 @@ class watcher_thread(threading.Thread): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             dn = done_num 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             outbuf = "Total: %d lines, Done: %d lines, Ratio: %d %%.\r"\ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      % (total_num, dn, dn * 100 / total_num) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            print outbuf, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sys.stdout.flush() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            print(outbuf, end='', flush=True) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if dn == total_num: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                print outbuf 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                print(outbuf) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 break 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             time.sleep(1) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -186,7 +185,7 @@ def query_domain(domain, tcp): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     proc = subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     out, _ = proc.communicate() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    outarr = out.splitlines() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    outarr = out.decode('utf-8').splitlines() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     cname = ip = '' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     for v in outarr: 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -222,7 +221,7 @@ def validate_ip_addr(ip_addr): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return False 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 def print_help(): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    print '''usage: update_hosts [OPTIONS] FILE 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    print('''usage: update_hosts [OPTIONS] FILE 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 A simple multi-threading tool used for updating hosts file. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 Options: 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -232,7 +231,7 @@ Options: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   -t QUERY_TYPE          dig command query type, default: aaaa 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   -c, --cname            write canonical name into hosts file 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   -n THREAD_NUM          set the number of worker threads, default: 10 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-''' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+''') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 def get_config(): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     shortopts = 'hs:o:t:n:c' 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -241,7 +240,7 @@ def get_config(): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         optlist, args = getopt.gnu_getopt(sys.argv[1:], shortopts, longopts) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     except getopt.GetoptError as e: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        print e, '\n' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        print(e) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         print_help() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         sys.exit(1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -262,7 +261,7 @@ def get_config(): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             sys.exit(0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if len(args) != 1: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        print "You must specify the input hosts file (only one)." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        print("You must specify the input hosts file (only one).") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         sys.exit(1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     config['infile'] = args[0] 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -274,8 +273,8 @@ def main(): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     dig_path = '/usr/bin/dig' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if not os.path.isfile(dig_path) or not os.access(dig_path, os.X_OK): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        print "It seems you don't have 'dig' command installed properly "\ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              "on your system." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        print("It seems you don't have 'dig' command installed properly "\ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              "on your system.") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         sys.exit(2) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     global hosts 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -283,7 +282,7 @@ def main(): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         with open(config['infile'], 'r') as infile: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             hosts = infile.readlines() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     except IOError as e: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        print e 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        print(e) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         sys.exit(e.errno) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if os.path.exists(config['outfile']): 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -292,10 +291,10 @@ def main(): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         outfile = open(config['outfile'], 'w') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     except IOError as e: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        print e 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        print(e) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         sys.exit(e.errno) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    print "Input: %s    Output: %s\n" % (config['infile'], config['outfile']) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    print("Input: %s    Output: %s\n" % (config['infile'], config['outfile'])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     threads = [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -306,7 +305,7 @@ def main(): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     worker_num = config['threadnum'] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     lines_num = len(hosts) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    lines_per_thread = lines_num / worker_num 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    lines_per_thread = lines_num // worker_num 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     lines_remain = lines_num % worker_num 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     start_pt = 0 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -335,7 +334,7 @@ def main(): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         outfile.writelines(hosts) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     except IOError as e: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        print e 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        print(e) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         sys.exit(e.errno) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     sys.exit(0) 
			 |