Форум сайта python.su
Всем здравствуйте.
Есть констуркция
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)
Прикреплённый файлы:
plugin.py (24,1 KБ)
Офлайн
SharkyEXEПопробовать подкл. сокетом на нужный порт ntp сервера и если будет ошибка возможно тогда стоит выдать сообщение о неполадках с интернетом.
Всем здравствуйте.Есть констуркция
Офлайн
Да нет, тут больше, почему не отрабатывает блок
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)
Офлайн
SharkyEXEА вы проверяли что в res перед этим куском кода попадает? М.б там др. данные?
Да нет, тут больше, почему не отрабатывает блок
Офлайн
А как проверить?
Офлайн
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()
Офлайн
Сделал так
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)
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
Отредактировано SharkyEXE (Сен. 23, 2018 17:06:47)
Прикреплённый файлы:
1_0_1_791D_1F_FD_1680000_0_0_0.jpg (352,6 KБ)
Офлайн
SharkyEXEМ.б отступы где-то не правильно разставлены? Ну еще можно проверять корректность выполнения через код возврата, вместо вывода, закрывать пайп и рез-татом будет код возврата, или None если все ок и код возврата 0.
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)
Офлайн
BM21
При Вашем желании есть файл в 1м сообщении тынц
Вы тут можете добавить, исправить строки, приложить файл Ваш здесь, я проверю, напишу.
Все делалось в программе AkelPad
Тут интересная задачка, а не банальное 2+2=4, был бы интерес поломать мозг…
Отредактировано SharkyEXE (Сен. 23, 2018 17:22:11)
Офлайн
Вот так я бы сделал, но лучше использовать 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)
Офлайн