Tomsk Sysadmins Forum

Unix => Программирование => Topic started by: Maikl on May 05, 2010, 14:43:07

Title: вопрос по phyton
Post by: Maikl on May 05, 2010, 14:43:07
помогите запустить такой скрипт

import os
import re
import time
import sys
import telnetlib
from threading import Thread
 
class testit(Thread):
   def __init__ (self,ip):
      Thread.__init__(self)
      self.ip = ip
      self.status = -1
   def run(self):
      pingaling = os.popen("ping -q -c2 "+self.ip,"r")
      while 1:
        line = pingaling.readline()
        if not line: break
        igot = re.findall(testit.lifeline,line)
        if igot:
            self.status = int(igot[0])
            if self.status == 0:
                tn = telnetlib.Telnet(HOST)
                tn.read_until("BCM96338 ADSL Router")
                tn.read_until("Login:")
                tn.write(user + "\n")
                tn.read_until("Password: ")
                tn.write(password + "\n")
                time.sleep(5)
#tn.write("ifconfig ppp_0_1_32_1\n")
                tn.write(«reboot\n»)
                time.sleep(5)
                tn.write(«logout\n»)
                time.sleep(60)
 
testit.lifeline = re.compile(r"(\d) received")
 
ip = "213.180.204.8"
HOST = "192.168.168.1"
user = "user"
password = "password"
 
current = testit(ip)
current.start()

выдаёт ошибку NameError: name 'testit' is not defined
Title: Re: вопрос по phyton
Post by: deepwalker on May 05, 2010, 16:01:38
Нет, он выдает другую ошибку:
Code: [Select]
  File "shit.py", line 20
    self.status = int(igot[])
                           ^
SyntaxError: invalid syntax
И прочтите pep-8, смотреть страшно ж. Класс именуется с прописными, пробел после `,` и тп.
Title: Re: вопрос по phyton
Post by: Maikl on May 05, 2010, 17:19:08
но у меня выдает именно такую ошибку, кстати код не мой и синтаксические ошибки исправлены просто мне необходимо ребутить модем при пропадании пинга до определенного узла, наткнулся на этот скрипт, может в системе чего-то не хватает ?
Title: Re: вопрос по phyton
Post by: deepwalker on May 05, 2010, 17:29:02
Киньте актуальный скрипт на paste, тут парсер лох его козявит.
Title: Re: вопрос по phyton
Post by: Maikl on May 05, 2010, 17:32:14
я код подправил у меня он выглядит именно так
Title: Re: вопрос по phyton
Post by: deepwalker on May 05, 2010, 18:14:28
Попробуйте так. Сильно не вдавался, но будет запускаться:

Code: [Select]
import os
import re
import time
import sys
import telnetlib
from threading import Thread
 
class TestIt(Thread):
   def __init__ (self, ip):
      Thread.__init__(self)
      self.ip = ip
      self.status = -1
      self.lifeline = re.compile(r"(\d) received")

   def run(self):
      pingaling = os.popen("ping -q -c2 " + self.ip, "r")
      while 1:
        line = pingaling.readline()
        if not line:
            break
        igot = re.findall(self.lifeline, line)
        if igot:
            self.status = int(igot[0])
            if self.status == 0:
                tn = telnetlib.Telnet(HOST)
                tn.read_until("BCM96338 ADSL Router")
                tn.read_until("Login:")
                tn.write(user + "\n")
                tn.read_until("Password: ")
                tn.write(password + "\n")
                time.sleep(5)
                #tn.write("ifconfig ppp_0_1_32_1\n")
                tn.write("reboot\n")
                time.sleep(5)
                tn.write("logout\n")
                time.sleep(60)
 
 
ip = "213.180.204.8"
HOST = "192.168.168.1"
user = "user"
password = "password"
 
current = TestIt(ip)
current.start()
Title: Re: вопрос по phyton
Post by: Maikl on May 06, 2010, 09:08:25
не работает, точнее запускается но ничего не делает, в режиме отладки дает

Code: [Select]
/testit(45)<module>()->Noneи так по кругу