Найти - Пользователи
Полная версия: Интерфейс скрипта snmp на python
Начало » Python для новичков » Интерфейс скрипта snmp на python
1 2
Stepan89
xam1816
out += f'{k} = {datetime.fromtimestamp(v).strftime(“%H:%M:%S”)}\n'
Странная штука, исправил на “Время” при нажатии выдаёт.
 Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python\lib\tkinter\__init__.py", line 1705, in __call__
    return self.func(*args)
  File "D:\Рабочий стол\time.py", line 48, in on_click
    text = format_data(data)
  File "D:\Рабочий стол\time.py", line 41, in format_data
    out += f'{k} = {datetime.fromtimestamp(v).strftime("%H:%M:%S")}\n'
TypeError: an integer is required (got type str)
ZerG
 datetime.fromtimestamp(int(v)).strftime("%H:%M:%S")
Stepan89
ZerG
Черт возьми, прав как никогда, благодарю
Stepan89
Вновь время появилось для моей “головной боли”, да и не дают забыть о ней. Сейчас допилить немного решил это все, и обратил внимание, что дата у меня следующего формата: (минуты:секунды:миллисекунды), а не (часы:минуты:секунды). Получается нужно разделить на 60 или как?
py.user.next
Stepan89
дата у меня следующего формата: (минуты:секунды:миллисекунды), а не (часы:минуты:секунды). Получается нужно разделить на 60 или как?
Миллисекунда - это одна тысячная секунды.

Stepan89
Сейчас допилить немного решил это все
Что именно? Где код твой?
Stepan89
Вот он, ненавистный)
  
from pysnmp.entity.rfc3413.oneliner import cmdgen
from datetime import datetime
import tkinter as tk
def on_clickReturn(e):
    on_click()
def get_data_from_sensor(ip):
    cmdGen = cmdgen.CommandGenerator()
    errorIndication, errorStatus, errorIndex, \
    varBindTable = cmdgen.CommandGenerator().bulkCmd(
        cmdgen.CommunityData('test-agent', 'public'),
        cmdgen.UdpTransportTarget((ip, 161)),
        0,
        25,
        ('1.3.6.1.4.1.41927.2.15.2.6'),  # Температура
        ('1.3.6.1.4.1.41927.2.15.2.7'),  # Вольтаж
        ('1.3.6.1.4.1.41927.2.15.2.1'),  # Входящий оптический сигнал
        ('1.3.6.1.4.1.41927.2.15.1.4'),  # Время работы
    )
    if errorIndication:
        return errorIndication
    else:
        if errorStatus:
            return'%s at %s' % (
                errorStatus.prettyPrint(),
                errorIndex and varBindTable[-1][int(errorIndex) - 1] or '?'
            )
        else:
            out = {}
            dictData = {'SNMPv2-SMI::enterprises.41927.2.15.2.6.0': 'Температура',
                        'SNMPv2-SMI::enterprises.41927.2.15.2.7.0': 'Вольтаж',
                        'SNMPv2-SMI::enterprises.41927.2.15.2.1.0': 'Входящий оптический сигнал',
                        'SNMPv2-SMI::enterprises.41927.2.15.1.4.0': 'Время работы' }
            for varBindTableRow in varBindTable:
                for name, val in varBindTableRow:
                    out.update({dictData[name.prettyPrint()]: val.prettyPrint()})
            return out
def format_data(data):
    out = ''
    for k, v in data.items():
        if k == 'Время работы':
            out += f'{k} = { datetime.fromtimestamp(int(v)).strftime("%H:%M:%S")}\n'
        else:
            out += f'{k} = {v}\n'
    return out
def on_click():
    ip = sv.get()
    data = get_data_from_sensor(ip)
    text = format_data(data)
    text_area.insert(1.0, text)
root = tk.Tk()
sv = tk.StringVar()
lbl = tk.Label(text='IP ОП FORO').pack()
entry = tk.Entry(textvariable=sv, width=60)
entry.pack()
btn = tk.Button(text='получить данные', command=on_click)
btn.pack()
text_area = tk.Text(width=60, height=5)
text_area.pack()
root.bind ('<Return>', on_clickReturn)
root.mainloop()
py.user.next
Stepan89 здесь писал
Stepan89
Время работы показывает в миллисекундах, хотелось бы в часах и минутах

xam1816 здесь писал
xam1816
  
out += f'{k} = {datetime.fromtimestamp(v).strftime("%H:%M:%S")}\n'

help(datetime.datetime.fromtimestamp)

fromtimestamp(...) method of builtins.type instance
timestamp[, tz] -> tz's local time from POSIX timestamp.

POSIX timestamp - это время в секундах, начиная с 00:00:00 1 января 1970-го года (день рождения операционной системы UNIX).

Если там время в миллисекундах, то 4274483 надо поделить на тысячу и взять остаток от деления на тысячу. Целую часть потом рассматривать как секунды и работать с ними как с секундами, а остаток от деления просто дописывать, потому что это миллисекунды, которых меньше тысячи (которых не хватает до одной целой секунды).
ZerG
Может пора уже таки прочитать учебник по питону? А то каждая строка у вас - угадай поле чудес -
если не угадалось пишем на форум
При том что все вопросы именно из учебника
Stepan89
*thanks*
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