Найти - Пользователи
Полная версия: Разобраться в констукции
Начало » Python для новичков » Разобраться в констукции
1 2 3
SharkyEXE
Всем здравствуйте.

Есть констуркция

     def NTP_set(self):
      if os.path.exists(os.path.join(plugin_path, "ntpdate")):
       cmd = '%s%s %s %s && echo "\n"' % (plugin_path, "/ntpdate -v -u ", 10, ntp2.vniiftri.ru)
       res = popen(cmd).read()
       if res == "":
        cmd = "ls -l %s%s" % (plugin_path, "/ntpdate")
        res = popen(cmd).read()
        if res[3]!="x":
         cmd = "chmod 755 %s%s" % (plugin_path, "/ntpdate")
         res = popen(cmd).read()
         self.session.open(MessageBox, _("ntpdate problem: attributes for 'ntpdate' have not been correct! Fixed now! Try again!\n%s" % res), MessageBox.TYPE_INFO)
        else:
          self.session.open(MessageBox, _("ntpdate problem: Internet connection ok? Time server ok?"), MessageBox.TYPE_INFO)
       else:
        self.session.open(MyConsole, _("Системное время с NTP ..."), [cmd])
        self.close()
        self.close()
      else:
       self.session.open(MessageBox, _("'ntpdate' не установлен !"), MessageBox.TYPE_ERROR)

Суть проще некуда , если вдуматься

1) Происходит запуск блока

2) Если есть файл ntpdate - то происходит выполнение команды ntpdate -v -u 10 ntp2.vniiftri.ru и вывод окна (MyConsole, _(“Системное время с NTP …”),

3) Если нету файла ntpdate - вывод сообщения ‘ntpdate’ не установлен !

4) Если есть файл ntpdate , но у него атрибуты не 755 - файлу ntpdate присваиваются атрибуты 755 и вывод сообщения ntpdate problem: attributes for ‘ntpdate’ have not been correct! Fixed now! Try again!

Интерес вызывает сообщение ntpdate problem: Internet connection ok? Time server ok? - сколько я не выключал интернет , выдергивал провод физически , изменял адрес с ntp2.vniiftri.ru на 1 - сообщения ntpdate problem: Internet connection ok? Time server ok? я не поулчил

Пожалуйста, помогите мне, как правильно написать условие IF , чтобы при отсутствии интернета и/или адреса , откуда обновлять - было сообщение ntpdate problem: Internet connection ok? Time server ok?

Спаисбо.
BM21
SharkyEXE
Всем здравствуйте.Есть констуркция
Попробовать подкл. сокетом на нужный порт ntp сервера и если будет ошибка возможно тогда стоит выдать сообщение о неполадках с интернетом.
SharkyEXE
Да нет, тут больше, почему не отрабатывает блок

 if res[3]!="x":
         cmd = "chmod 755 %s%s" % (plugin_path, "/ntpdate")
         res = popen(cmd).read()
         self.session.open(MessageBox, _("ntpdate problem: attributes for 'ntpdate' have not been correct! Fixed now! Try again!\n%s" % res), MessageBox.TYPE_INFO)
        else:
          self.session.open(MessageBox, _("ntpdate problem: Internet connection ok? Time server ok?"), MessageBox.TYPE_INFO)
BM21
SharkyEXE
Да нет, тут больше, почему не отрабатывает блок
А вы проверяли что в res перед этим куском кода попадает? М.б там др. данные?
SharkyEXE
А как проверить?
BM21
SharkyEXE
cmd = “ls -l %s%s” % (plugin_path, “/ntpdate”) res = popen(cmd).read()
После
 cmd = "ls -l %s%s" % (plugin_path, "/ntpdate")
        res = popen(cmd).read()
Написать print res
SharkyEXE
Сделал так
        res = popen(cmd).read()
       if res == "":
        cmd = "ls -l %s%s" % (plugin_path, "/ntpdate")
        res = popen(cmd).read()
        open('/usr/lib/enigma2/python/Plugins/Extensions/SetClock/log.txt', 'a').write(res)

Итого у меня так - см. картинку

Суть в чем - из разделов
        if res == "":
        cmd = "ls -l %s%s" % (plugin_path, "/ntpdate")
        res = popen(cmd).read()
        open('/usr/lib/enigma2/python/Plugins/Extensions/SetClock/log.txt', 'a').write(res)
        if res[3]!="x":
         cmd = "chmod 755 %s%s" % (plugin_path, "/ntpdate")
         res = popen(cmd).read()
         self.session.open(MessageBox, _("ntpdate problem: attributes for 'ntpdate' have not been correct! Fixed now! Try again!\n%s" % res), MessageBox.TYPE_INFO)
        else:
          self.session.open(MessageBox, _("ntpdate problem: Internet connection ok? Time server ok?"), MessageBox.TYPE_INFO)
работает только
         if res[3]!="x":
         cmd = "chmod 755 %s%s" % (plugin_path, "/ntpdate")
         res = popen(cmd).read()
         self.session.open(MessageBox, _("ntpdate problem: attributes for 'ntpdate' have not been correct! Fixed now! Try again!\n%s" % res), MessageBox.TYPE_INFO)
Чтобы у меня было ntpdate problem: Internet connection ok? Time server ok? - нужно, чтобы выполнилось if res == “”: , а у меня не выполняется if res == “”: , а сразу идет на выполнение self.session.open(MyConsole, _(“Системное время с NTP …”), )

Если по русски, надо переписать условие, типа
 if not res[3]!="x":
self.session.open(MessageBox, _("ntpdate problem: Internet connection ok? Time server ok?")

Я пробовал - выдает ошибку
13:37:20.8490 { D }     if not res[3]!="x":
13:37:20.8494 { D } IndexError: string index out of range

И также, чтобы это выполнилось, требуется, чтобы зашло в if res == “”: , а у меня не выполняется if res == “”: , а сразу идет на выполнение self.session.open(MyConsole, _(“Системное время с NTP …”), )
BM21
SharkyEXE
def NTP_set(self): if os.path.exists(os.path.join(plugin_path, “ntpdate”)): cmd = ‘%s%s %s %s && echo “\n”’ % (plugin_path, “/ntpdate -v -u ”, 10, ntp2.vniiftri.ru) res = popen(cmd).read() if res == “”: cmd = “ls -l %s%s” % (plugin_path, “/ntpdate”) res = popen(cmd).read() if res!=“x”: cmd = “chmod 755 %s%s” % (plugin_path, “/ntpdate”) res = popen(cmd).read() self.session.open(MessageBox, _(“ntpdate problem: attributes for ‘ntpdate’ have not been correct! Fixed now! Try again!\n%s” % res), MessageBox.TYPE_INFO) else: self.session.open(MessageBox, _(“ntpdate problem: Internet connection ok? Time server ok?”), MessageBox.TYPE_INFO) else: self.session.open(MyConsole, _(“Системное время с NTP …”), ) self.close() self.close() else: self.session.open(MessageBox, _(“'ntpdate' не установлен !”), MessageBox.TYPE_ERROR)
М.б отступы где-то не правильно разставлены? Ну еще можно проверять корректность выполнения через код возврата, вместо вывода, закрывать пайп и рез-татом будет код возврата, или None если все ок и код возврата 0.
Тут просто форматирование кода на форуме не понятно как отступы разставлены.
SharkyEXE
BM21

При Вашем желании есть файл в 1м сообщении тынц

Вы тут можете добавить, исправить строки, приложить файл Ваш здесь, я проверю, напишу.

Все делалось в программе AkelPad

Тут интересная задачка, а не банальное 2+2=4, был бы интерес поломать мозг…
BM21
Вот так я бы сделал, но лучше использовать os.subproccess если есть возможность. Тут еще не обрабатывается ошибка при вызове os.stat
 #-*-encoding: utf-8-*-
import stat
PROGRAM_NAME = 'ntpdate'
PLUGIN_PATH = './plugin'
NTP_SERVER = 'ntp2.vniiftri.ru'
def NTP_set(self):
    ntp_path = os.path.join(PLUGIN_PATH, PROGRAM_NAME)
    if os.path.exists(ntp_path):
        uid =  os.getuid() # ID пользователя из под которого запущен процесс
        if os.access(ntp_path, os.X_OK): # Если есть права на выполнение
            cmd = '%s%s %s %s && echo "\n"' % (PLUGIN_PATH, "/ntpdate -v -u ", 10, NTP_SERVER)
            try:
                fo = popen(cmd)
                out = fo.read()
                exit_code = fo.close()
            except OSError as e:
                self.session.open(MessageBox, _("Ошибка  запуска %s (%i): %s" % (PROGRAM_NAME, e.strerror)), MessageBox.TYPE_ERROR)
            
            if not exit_code is None: # Если программа вернула не нулевой код возврата
                self.session.open(MessageBox, _("Ошибка установки времени(%i): %s" % (exit_code, out)), MessageBox.TYPE_ERROR)
            else:
                self.session.open(MyConsole, _("Системное время с NTP ..."), [cmd])
                self.close()
                self.close()
        elif 0 == uid or os.stat(ntp_path)[4] == uid: # Если скрипт запущен из под рута или пользователь под которым запущен скрипт является вдладельцем ntpdate
            try:
                os.chmod(ntp_path,  stat.S_IRUSR |  stat.S_IWUSR | stat.S_IXUSR | stat.S_IRGRP | stat.S_IXGRP |  stat.S_IROTH |  stat.S_IXOTH) # выставляем 755
            except OSError as e:
                self.session.open(MessageBox, _("Ошибка установки прав на %s: %s" % (PROGRAM_NAME, e.strerror)), MessageBox.TYPE_ERROR)
            else:
                self.session.open(MessageBox, _("%s problem: attributes for '%s' have not been correct! Fixed now! Try again!" % (PROGRAM_NAME, PROGRAM_NAME)), MessageBox.TYPE_INFO)
            
            self.session.open(MessageBox, _("%s problem: attributes for '%' have not been correct! Fixed now! Try again!" % PROGRAM_NAME), MessageBox.TYPE_INFO)
        else:
            pass
            # Тут сообщение на тот сллучай если нисего сделать нельзя
    else:
        self.session.open(MessageBox, _("'%s' не установлен !" % PROGRAM_NAME), MessageBox.TYPE_ERROR)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB