Python Forum

Full Version: Output not printing when execute scripts in threads
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
#!/usr/bin/python
import threading
import sys
import os
import unidecode
import telnetlib
import time
import re
import datetime
from time import sleep
start = time.time()
user = 'eciecidslam'
password = 'Hi-FOCuS'
today = datetime.date.today()
start = time.time()
ecienvfile = open('ecienvstatus.txt','w')
def open_telnet(host):
             timeout = 120
             try:
                 session = telnetlib.Telnet(host, 23, timeout)
                 #session.set_debuglevel(2)
                 time.sleep(1)
                 session.read_until(b"Login :")
                 session.write((user+"\r").encode('ascii'))
                 time.sleep(2)
                 session.read_until(b"Password :",2)
                 session.write((password + "\r").encode('ascii'))
                 time.sleep(2)
                 session.read_until(b"MCR64A >")
                 session.write("fan_status".encode('ascii') + b"\r")
                 fan_output = session.read_until("MCR64A >".encode('ascii'), timeout )
                 session.write("temp_readings".encode('ascii') + b"\r")
                 temp_output = session.read_until("MCR64A >".encode('ascii'), timeout )
                 session.write =("logout" +b"\r")
                 session.close()
                 for line in fan_output.decode('utf-8').split('\n')[1:]:
                     if 'Fans' in line:
                             #print(line)
                         new_status = line.split(':')[1]
                         if 'NORMAL' in new_status:
                             status = 'Normal'
                         if 'fail' in new_status:
                             status = 'Fan_Fail'
                 for temp_status in temp_output.decode('utf-8').split('\n')[4:]:
                         tem_status = re.sub('\s{2,}', ' ', temp_status)
                         Dirty,Temperature,Sensation = tem_status.split('|')[3],tem_status.split('|')[4],tem_status.split('|')[5]
                         print('{}\t {}\t {}\t {}\t {}'.format(host,status,Dirty,Temperature,Sensation))
                         ecienvfile.write('{} {} {} {} {}\n'.format(host,status,Dirty,Temperature,Sensation))
                         sr_no +=1
             except Exception as excp:
                 pass
def create_threads():
    threads = []
    with open('ecienv.txt','r') as ipfile:
        for sr_no, line in enumerate(ipfile, start=1):
            host = line.strip()
            th = threading.Thread(target = open_telnet ,args = (host,))
            th.start()
            threads.append(th)
        for thr in threads:
            thr.join()

if __name__ == "__main__":
        create_threads()
        print ("Exiting the program")
        #outfile.close()
        ecienvfile.close()
        print('It took', time.time()-start, 'seconds.')
where as without threading, shows output

#!/usr/bin/python
import threading
import sys
import os
import unidecode
import telnetlib
import time
import re
import datetime
from time import sleep
start = time.time()
user = 'eciecidslam'
password = 'Hi-FOCuS'
today = datetime.date.today()
start = time.time()
ecienvfile = open('ecienvstatus.txt','w')
#def open_telnet(host):
timeout = 120
with open('ecienv.txt','r') as ipfile:
        for sr_no, line in enumerate(ipfile, start=1):
            host = line.strip()
            #print(host)
            try:
               #print(host)
               session = telnetlib.Telnet(host, 23, timeout)
               #session.set_debuglevel(2)
               time.sleep(1)
               session.read_until(b"Login :")
               session.write((user+"\r").encode('ascii'))
               time.sleep(2)
               session.read_until(b"Password :",2)
               session.write((password + "\r").encode('ascii'))
               time.sleep(2)
               session.read_until(b"MCR64A >")
               session.write("fan_status".encode('ascii') + b"\r")
               fan_output = session.read_until("MCR64A >".encode('ascii'), timeout )
               session.write("temp_readings".encode('ascii') + b"\r")
               temp_output = session.read_until("MCR64A >".encode('ascii'), timeout )
               session.write =("logout" +b"\r")
               session.close()
               for line in fan_output.decode('utf-8').split('\n')[1:]:
                   if 'Fans' in line:
             #print(line)
                       new_status = line.split(':')[1]
                   if 'NORMAL' in new_status:
                       status = 'Normal'
                   if 'fail' in new_status:
                       status = 'Fan_Fail'
                   if 'not' in new_status:
                       status = 'No_Fan'
                        #print(status)
               for temp_status in temp_output.decode('utf-8').split('\n')[4:]:
                   tem_status = re.sub('\s{2,}', ' ', temp_status)
                   Dirty,Temperature,Sensation = tem_status.split('|')[3],tem_status.split('|')[4],tem_status.split('|')[5]
                   print('{}\t {}\t {}\t {}\t {}'.format(host,status,Dirty,Temperature,Sensation))
                 #ecienvfile.write('{} {} {} {} {}\n'.format(host,status,Dirty,Temperature,Sensation))
                   sr_no +=1
            except Exception as excp:
                pass
Compare your indentation in both. if 'Fans' is not in line then status and new_status are never updated.