Проверка доступности узла по ip в PyQt5
Подскажите куда копать, есть GUI программа с QLabel, пытаюсь проверять в фоне программы доступность узла и вывести результат в метку.
Только нужно чтобы проверка была постоянна, пока работает приложение.
main.py
import sys
from PyQt5 import QtCore, QtWidgets, QtGui
from PyQt5.QtWidgets import QMessageBox
from PyQt5.QtGui import *
import design13_ping # Это наш конвертированный файл дизайна
import os
import telnetlib
import schedule
import time
class ExampleApp(QtWidgets.QMainWindow, design13_ping.Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self) # Это нужно для инициализации нашего дизайна
def job(self):
Ping = os.system("ping -c 1 " + "192.168.6.15")
if Ping == 0:
self.lbl.setText("yes")
#print('no')
else:
self.lbl.setText("no")
#print('yes')
schedule.every(2).seconds.do(job)
while True:
schedule.run_pending()
time.sleep(1)
def main():
app = QtWidgets.QApplication(sys.argv)
window = ExampleApp()
window.show()
app.exec_()
if __name__ == '__main__':
main()
design13_ping.py
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(599, 140)
#MainWindow.setFixedSize(599, 140)
MainWindow.setAnimated(True)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.layoutWidget = QtWidgets.QWidget(self.centralwidget)
self.layoutWidget.setGeometry(QtCore.QRect(10, 10, 581, 41))
self.layoutWidget.setObjectName("layoutWidget")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.layoutWidget)
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout.setObjectName("horizontalLayout")
self.lbl=QtWidgets.QLabel(self.centralwidget)
self.lbl.setText("asdf")
#self.layoutWidget.addWidget(self.lbl)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", " "))
Update
Не подскажете как применить вот эту часть кода в process.start
self.r = requests.get("http://192.168.6.15")
self.view=self.r.status_code
if view==200:
self.setWindowTitle("Подключен к узлу 1")
else:
self.setWindowTitle("Не подключен к узлу 1")
мне нужно чтоб в программе было если узел доступен то надпись ПОДКЛЮЧЕН, если нет то НЕТ, программа будет сутками работать (аля мониторинг за датчиками) вот будет не совсем удобно если пинги будут сутками идти, а так я бы просто таймер поставил чтоб раз в пол часа проверял доступ и выводил ПОДКЛЮЧЕН или НЕТ
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Попробуйте так:
import sys
from PyQt5.Qt import *
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
centralWidget = QWidget()
self.setCentralWidget(centralWidget)
self.runButton = QPushButton('Start')
self.runButton.clicked.connect(self.callProgram)
self.textEdit = QTextEdit()
layout = QHBoxLayout(centralWidget)
layout.addWidget(self.textEdit)
layout.addWidget(self.runButton)
# Объект QProcess для внешнего приложения
self.process = QProcess(self)
# QProcess выдает `readyRead`, когда есть данные для чтения !!!
self.process.readyRead.connect(self.dataReady)
self.timer = QTimer(self, interval=5000) # установите нужный вам интервал
self.timer.timeout.connect(self.on_timeout)
def dataReady(self):
cursor = self.textEdit.textCursor()
cursor.movePosition(cursor.End)
cursor.insertText( self.process.readAll().data().decode("cp866") )
self.textEdit.ensureCursorVisible()
def on_timeout(self):
# запустить процесс
# `start` принимает exec и список аргументов
#self.process.start('ping', ['127.0.0.1'])
self.process.start('ping', ['ru.stackoverflow.com'])
def callProgram(self):
if self.runButton.text() == 'Start':
self.runButton.setText('Stop')
self.timer.start()
else:
self.timer.stop()
self.runButton.setText('Start')
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MainWindow()
w.resize(600, 300)
w.show()
sys.exit(app.exec_())
