91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用PyQt5設(shè)計(jì)下載遠(yuǎn)程服務(wù)器日志文件程序

OSC開(kāi)源社區(qū) ? 來(lái)源:OSC開(kāi)源社區(qū) ? 作者:OSC開(kāi)源社區(qū) ? 2022-11-15 11:36 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

最近通過(guò) PyQt5 設(shè)計(jì)了一個(gè)下載服務(wù)器指定日期日志文件的程序,里面有些有意思的技術(shù)點(diǎn),現(xiàn)在做一些分享。

PyQt5 是一套 Python 綁定 Digia Qt5 應(yīng)用的框架,是最強(qiáng)大的 GUI 庫(kù)之一,使用 PyQt5 我們能夠很容易的開(kāi)發(fā)桌面應(yīng)用,接下來(lái)我們將用它來(lái)開(kāi)發(fā)一個(gè)下載服務(wù)器日志文件的小程序。

前期準(zhǔn)備

軟件- QT5Python 模塊- PyQt5==5.15.7- paramiko==2.9.2PyCharm 添加擴(kuò)展工具 PyUICPyUIC 擴(kuò)展用于將使用 Qt Designer 生成的 ui 文件轉(zhuǎn)成 py 文件,可以在 PyCharm 中通過(guò) Preferences-Tools-External Tools 進(jìn)行配置,截圖如下:dcd4c4c8-6495-11ed-8abf-dac502259ad0.png
Program:/Users/macbookpro/workspace/projects/DownloadServerLog/venv/bin/python3.9
Arguments:-m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py
Working directory:/Users/macbookpro/workspace/projects/DownloadServerLog/ui

實(shí)操步驟

1. 創(chuàng)建項(xiàng)目

創(chuàng)建 DownloadServerLog 項(xiàng)目,設(shè)計(jì)程序結(jié)構(gòu)如下:
DownloadServerLog
├── app
│   ├── downloadlog.py
│   └── downloadlog_qtui.py
├── main.py
└── ui
│   └── downloadlog_qtui.ui
├── .env
main.py 作為程序入口文件,.env 存放環(huán)境變量,ui 存放使用 Qt Designer 設(shè)計(jì)界面導(dǎo)出的源碼文件,app 存放下載程序文件。

2.使用 QtDesigner設(shè)計(jì)界面

Qt Designer 使用起來(lái)非常簡(jiǎn)單,可以通過(guò)“拖拉拽”的形式生成 UI 界面(文檔:https://doc.qt.io/qtcreator/creator-using-qt-designer.html),設(shè)計(jì)界面如下:dced860c-6495-11ed-8abf-dac502259ad0.png這個(gè)程序功能一目了然,左側(cè)幾個(gè)輸入框用于輸入必要的信息,右側(cè)一個(gè)展示框用于展示程序?qū)崟r(shí)日志。界面設(shè)計(jì)好后可以將其保存至項(xiàng)目 DownloadServerLog 下的 ui 目錄下 downloadlog_qtui.ui,供后續(xù)使用。

3. 使用 ui 生成對(duì)應(yīng)的 py 文件

使用 PyCharm 打開(kāi)項(xiàng)目,在 downloadlog_qtui.ui 文件上右鍵,選擇 External Tools 使用 PyUIC 根據(jù) ui 文件生成對(duì)應(yīng)的 py 文件 downloadlog_qtui.py,將文件存放至 app 目錄。dcfed6dc-6495-11ed-8abf-dac502259ad0.png ? ?

4. 新建 main.py 作為程序入口

在項(xiàng)目根目錄下創(chuàng)建 main.py 文件:
import sys


from PyQt5 import QtCore
from PyQt5.QtCore import QObject, pyqtSignal
from PyQt5.QtWidgets import QApplication, QMainWindow
from threading import Thread


from app.downloadlog_qtui import Ui_Dialog
from app.downloadlog import DownloadLog




class CommunicateSignal(QObject):
    text_print = pyqtSignal(str)




# MyWindow 是主窗口程序,繼承自 PyQt5.QtWidgets.QMainWindow
# 和通過(guò) ui 文件生成的 downloadlog_qtui.py 中的 Ui_Dialog 類(lèi)
class MyWindow(QMainWindow, Ui_Dialog):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setupUi(self)
        self.btn_download.clicked.connect(self.click_download)


        # 自定義信號(hào)處理函數(shù)
        self.comm_signal = CommunicateSignal()
        self.comm_signal.text_print.connect(self.show_text)


        self.set_window_init_data()


    def set_window_init_data(self):
        """設(shè)置程序窗體初始值"""
        # 從 .env 讀取環(huán)境變量
        result_dict = dict()
        with open('.env', 'r', encoding='utf-8') as f:
            for line in f.readlines():
                key = line.split('=')[0].strip()
                value = line.split('=')[-1].strip()
                result_dict[key] = value


        # 設(shè)置輸入框值
        _translate = QtCore.QCoreApplication.translate
        self.host.setText(_translate("Dialog", result_dict.get("HOST", '')))
        self.port.setText(_translate("Dialog", result_dict.get("PORT", '22')))
        self.username.setText(_translate("Dialog", result_dict.get("USERNAME", 'root')))
        self.password.setText(_translate("Dialog", result_dict.get("PASSWORD", '')))
        self.directory.setPlainText(_translate("Dialog", result_dict.get("DIRECTORY", '')))
        self.startTime.setDate(QtCore.QDate.currentDate())
        self.endTime.setDate(QtCore.QDate.currentDate())




    def get_window_input_value(self):
        """獲取程序各「輸入框」組件值"""
        return {
            "host": self.host.text(),
            "port": self.port.text(),
            "username": self.username.text(),
            "password": self.password.text(),
            "directory": self.directory.toPlainText(),
            "start_time": self.startTime.date().toString("yyyy-MM-dd"),
            "end_time": self.endTime.date().toString("yyyy-MM-dd"),
            "suffix": ".log",
        }


    def show_text(self, text):
        """將文本內(nèi)容追加到程序「展示框」"""
        self.textBrowser.append(text)


    def click_download(self):
        """處理點(diǎn)擊「下載」按鈕事件"""
        params = self.get_window_input_value()


        def run():
            res = DownloadLog(conn_type='ssh', comm_signal=self.comm_signal, **params)
            res.main()


        t = Thread(target=run)
        t.start()




if __name__ == '__main__':
    app = QApplication(sys.argv)
    myWin = MyWindow()
    myWin.show()
    sys.exit(app.exec_())
MyWindow 作為主窗口程序,程序初始化時(shí)會(huì)將 self.click_download 方法注冊(cè)到 下載 按鈕的點(diǎn)擊事件,并自動(dòng)調(diào)用 self.set_window_init_data 方法來(lái)設(shè)置輸入框初始值。

5. 下載

下載日志程序 DownloadLog 定義在 app/downloadlog.py 中,遠(yuǎn)程下載文件主要步驟有兩步:
  • 通過(guò) SSH 登錄遠(yuǎn)程服務(wù)器
  • 通過(guò) FTP 進(jìn)行文件下載
這里采用 paramiko 來(lái)實(shí)現(xiàn)遠(yuǎn)程下載功能,paramiko 是一個(gè)純 Python 庫(kù),它實(shí)現(xiàn)了 SSHv2 協(xié)議,提供了 SSH 和 FTP 的能力。核心代碼如下,讀者可以根據(jù)自己的需求實(shí)現(xiàn) DownloadLog:
class DownloadLog(object):
    def __init__(self, **kwargs):
        """初始化一些參數(shù)"""
        ...


    def main(self):
        # 獲取 Transport 實(shí)例
        tran = paramiko.Transport((self.host, int(self.port)))
        # 連接 SSH 服務(wù)端
        tran.connect(username=self.username, password=self.password)
        # 創(chuàng)建 SFTP 實(shí)例
        self.sftp = paramiko.SFTPClient.from_transport(tran)
        # 下載文件
        # :param str remotepath: the remote file to copy
        # :param str localpath: the destination path on the local host
        self.sftp.get(remotepath=self.remote_path, localpath=self.local_path)

6. 展示下載過(guò)程

為了將下載程序執(zhí)行步驟實(shí)時(shí)展示到輸出框,這里需要引入 PyQt5 的信號(hào)處理機(jī)制。由于 PyQt 建議只在主線(xiàn)程中操作界面,可以發(fā)現(xiàn)我們?cè)?main.py 中調(diào)用 DownloadLog.main 方法時(shí)創(chuàng)建了一個(gè)新的線(xiàn)程。所有的 GUI 程序都是事件驅(qū)動(dòng)的,事件可能由用戶(hù)觸發(fā),比如點(diǎn)擊 下載 按鈕事件,也可能由程序觸發(fā),比如我們現(xiàn)在要實(shí)現(xiàn)的展示下載過(guò)程的功能,就需要使用程序主動(dòng)觸發(fā)事件。在 PyQt5 中通過(guò) Signal 信號(hào)來(lái)處理事件,其基本使用步驟如下:自定義一個(gè) CommunicateSignal 類(lèi),繼承自 PyQt5 的 QObject 類(lèi),里面封裝自定義的 Signal 信號(hào)(Signal 實(shí)例對(duì)象的初始化參數(shù)指定的類(lèi)型,就是發(fā)出信號(hào)對(duì)象時(shí),傳遞的參數(shù)數(shù)據(jù)類(lèi)型。因?yàn)?PyQt5 底層是 C++ 開(kāi)發(fā)的,必須指定類(lèi)型)。
class CommunicateSignal(QObject):
    text_print = pyqtSignal(str)
定義主線(xiàn)程執(zhí)行的函數(shù)處理 Signal 信號(hào)(通過(guò) connect 方法綁定)。
# 自定義信號(hào)處理函數(shù)
self.comm_signal = CommunicateSignal()
self.comm_signal.text_print.connect(self.show_text)
在 DownloadLog 線(xiàn)程需要操作界面的時(shí)候,就通過(guò)自定義對(duì)象(CommunicateSignal)發(fā)出信號(hào)(使用 emit 方法發(fā)出信號(hào)),所以在實(shí)例化 DownloadLog 時(shí)會(huì)將 comm_signal 傳遞進(jìn)去。
# 通過(guò)該信號(hào)對(duì)象的 emit 方法發(fā)出信號(hào),emit 方法的參數(shù)傳遞必要的數(shù)據(jù)。
# 參數(shù)類(lèi)型遵循定義 Signal 時(shí)指定的類(lèi)型。
self.comm_signal.text_print.emit(text)
主線(xiàn)程信號(hào)處理函數(shù),被觸發(fā)執(zhí)行,獲取 Signal 里面的參數(shù),執(zhí)行必要的更新界面操作,這里將每次通過(guò)事件傳過(guò)來(lái)的文本內(nèi)容展示到輸出框內(nèi)。
def show_text(self, text):
    """將文本內(nèi)容追加到程序「展示框」"""
    self.textBrowser.append(text)

7. 效果展示

通過(guò)以上步驟我們完成的程序設(shè)計(jì),現(xiàn)在可以驗(yàn)證下這個(gè)下載日志文件的小程序了:dd328d7e-6495-11ed-8abf-dac502259ad0.png查看下載結(jié)果:dd47c644-6495-11ed-8abf-dac502259ad0.png ? ?

總結(jié)

我們通過(guò) PyQt5 實(shí)現(xiàn)了一個(gè)下載遠(yuǎn)程服務(wù)器日志文件的小程序,其實(shí)它不止可以用來(lái)下載日志,同樣可以用來(lái)下載其他文件。借助 PyQt5 強(qiáng)大的能力,我們可以通過(guò)“拖拉拽”的形式很容易地實(shí)現(xiàn)桌面端程序,只需要將原來(lái)的 Python 腳本綁定到 UI 程序的事件中,就實(shí)現(xiàn)了命令行程序到桌面程序的演進(jìn)。接下來(lái)你可以根據(jù)自己的需求來(lái)定制自己的桌面小程序啦~

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    14

    文章

    10270

    瀏覽量

    91553
  • GUI
    GUI
    +關(guān)注

    關(guān)注

    3

    文章

    697

    瀏覽量

    43503

原文標(biāo)題:【實(shí)操日記】使用PyQt5設(shè)計(jì)下載遠(yuǎn)程服務(wù)器日志文件程序

文章出處:【微信號(hào):OSC開(kāi)源社區(qū),微信公眾號(hào):OSC開(kāi)源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    服務(wù)器數(shù)據(jù)恢復(fù)】服務(wù)器raid5陣列raid模塊損壞的數(shù)據(jù)恢復(fù)案例

    某品牌服務(wù)器上面有一組由多塊硬盤(pán)組建的riad5陣列。意外斷電后管理員重啟服務(wù)器發(fā)現(xiàn)該服務(wù)器無(wú)法使用。 根據(jù)用戶(hù)方描述的情況,服務(wù)器數(shù)據(jù)恢
    的頭像 發(fā)表于 01-29 16:46 ?212次閱讀

    服務(wù)器遠(yuǎn)程連接超時(shí)以及拒絕連接的真實(shí)緣由和解決辦法

    ,這類(lèi)問(wèn)題在Linux的SSH、Windows的RDP、數(shù)據(jù)庫(kù)連接以及API接口訪(fǎng)問(wèn)中都挺常見(jiàn)。 最常見(jiàn)的情形包含:SSH沒(méi)辦法連接服務(wù)器、RDP不能遠(yuǎn)程登錄Windows、數(shù)據(jù)庫(kù)端口訪(fǎng)問(wèn)超時(shí)、內(nèi)網(wǎng)服務(wù)從外網(wǎng)無(wú)法訪(fǎng)問(wèn)、
    的頭像 發(fā)表于 11-19 15:34 ?1241次閱讀

    服務(wù)器數(shù)據(jù)恢復(fù)—意外斷電!Linux服務(wù)器數(shù)據(jù)恢復(fù)大揭秘

    某品牌服務(wù)器+存儲(chǔ),安裝的linux操作系統(tǒng)。 機(jī)房意外斷電導(dǎo)致服務(wù)器操作系統(tǒng)無(wú)法正常啟動(dòng),服務(wù)器管理員故障服務(wù)器進(jìn)行修復(fù)操作后進(jìn)入系統(tǒng)查看數(shù)據(jù),發(fā)現(xiàn)部分
    的頭像 發(fā)表于 11-18 11:20 ?496次閱讀

    恒訊科技分析:香港服務(wù)器如何遠(yuǎn)程桌面連接和管理?

    對(duì)于選擇香港服務(wù)器的企業(yè)和開(kāi)發(fā)者而言,無(wú)論身在何處,穩(wěn)定、安全地遠(yuǎn)程連接和管理服務(wù)器都是首要任務(wù)。恒訊科技將詳細(xì)解析如何通過(guò)遠(yuǎn)程桌面連接(Windows)和SSH(Linux)等主流方
    的頭像 發(fā)表于 11-06 14:18 ?682次閱讀

    SSH 遠(yuǎn)程連接內(nèi)網(wǎng) Linux 服務(wù)器

    利用 ZeroNews,您可對(duì)用內(nèi)網(wǎng)的 Linux 服務(wù)器進(jìn)行統(tǒng)一的 SSH 遠(yuǎn)程連接管理,當(dāng)用戶(hù)外出時(shí),可通過(guò) ZeroNews 分配的公網(wǎng)域名地址,快速訪(fǎng)問(wèn)企業(yè)內(nèi)部、家庭的 Linux
    的頭像 發(fā)表于 09-17 19:52 ?475次閱讀
    SSH <b class='flag-5'>遠(yuǎn)程</b>連接內(nèi)網(wǎng) Linux <b class='flag-5'>服務(wù)器</b>

    華納云服務(wù)器Linux系統(tǒng)日志集中化管理平臺(tái)搭建

    在云計(jì)算時(shí)代,企業(yè)運(yùn)維團(tuán)隊(duì)面臨服務(wù)器數(shù)量激增帶來(lái)的日志管理難題。本文詳細(xì)解析如何基于Linux系統(tǒng)構(gòu)建高效的云服務(wù)器日志集中化管理平臺(tái),涵蓋日志
    的頭像 發(fā)表于 09-12 14:11 ?509次閱讀

    服務(wù)器數(shù)據(jù)恢復(fù)—服務(wù)器斷電導(dǎo)致raid模塊損壞的數(shù)據(jù)恢復(fù)案例

    某品牌服務(wù)器中有12塊硬盤(pán),組建了一組raid5磁盤(pán)陣列,服務(wù)器內(nèi)存儲(chǔ)的是普通文件。 機(jī)房供電不穩(wěn)定導(dǎo)致服務(wù)器斷電,管理員重啟
    的頭像 發(fā)表于 09-04 12:57 ?845次閱讀

    怎樣在阿里ECS服務(wù)器上架設(shè)自己的OpenVPN服務(wù)器?

    需要自己架設(shè)服務(wù)器,讓現(xiàn)場(chǎng)的IR615路由連接自己的服務(wù)器。能通過(guò)自己的服務(wù)器進(jìn)行數(shù)據(jù)采集和遠(yuǎn)程運(yùn)維。
    發(fā)表于 08-06 06:56

    一文解釋清楚云服務(wù)器系統(tǒng)盤(pán)怎么清除垃圾

    在現(xiàn)代云計(jì)算的環(huán)境中,云服務(wù)器已經(jīng)成為企業(yè)和個(gè)人用戶(hù)的主要選擇。在使用云服務(wù)器的過(guò)程中,用戶(hù)往往會(huì)面臨系統(tǒng)盤(pán)空間不足的問(wèn)題,這主要是由于各種應(yīng)用程序、下載文件、
    的頭像 發(fā)表于 07-30 14:28 ?1393次閱讀

    遠(yuǎn)程日志errDump調(diào)試功能實(shí)戰(zhàn)教程:案例驅(qū)動(dòng)的故障排查!

    及Air8101開(kāi)發(fā)板實(shí)操驗(yàn)證。 ? 一、errDump功能介紹 1.1 errDump有什么用? errDump是LuatOS系統(tǒng)中的錯(cuò)誤日志上報(bào)模塊,主要用于遠(yuǎn)程調(diào)試與故障診斷。 其原理是將模塊運(yùn)行過(guò)程中產(chǎn)生的錯(cuò)誤信息或者應(yīng)用日志
    的頭像 發(fā)表于 06-09 16:51 ?756次閱讀
    <b class='flag-5'>遠(yuǎn)程</b><b class='flag-5'>日志</b>errDump調(diào)試功能實(shí)戰(zhàn)教程:案例驅(qū)動(dòng)的故障排查!

    手把手教你配置遠(yuǎn)程errDump調(diào)試:日志追蹤不求人!

    功能及Air8101開(kāi)發(fā)板實(shí)操驗(yàn)證。 一、errDump功能介紹 1.1 errDump有什么用? errDump是LuatOS系統(tǒng)中的錯(cuò)誤日志上報(bào)模塊,主要用于遠(yuǎn)程調(diào)試與故障診斷。 其原理是將模塊運(yùn)行過(guò)程中產(chǎn)生的錯(cuò)誤信息或者應(yīng)用日志
    的頭像 發(fā)表于 06-05 18:32 ?1152次閱讀
    手把手教你配置<b class='flag-5'>遠(yuǎn)程</b>errDump調(diào)試:<b class='flag-5'>日志</b>追蹤不求人!

    手機(jī)APP遠(yuǎn)程控制,智能家居監(jiān)測(cè)、智能控制系統(tǒng)(STM32L4、服務(wù)器、安卓源碼)實(shí)例項(xiàng)目打包下載

    手機(jī)APP遠(yuǎn)程控制,智能家居監(jiān)測(cè)、智能控制系統(tǒng)(STM32L4、服務(wù)器、安卓源碼)實(shí)例項(xiàng)目打包,推薦下載!
    發(fā)表于 05-29 21:47

    服務(wù)器數(shù)據(jù)恢復(fù)—Linux系統(tǒng)服務(wù)器崩潰的數(shù)據(jù)恢復(fù)案例

    服務(wù)器數(shù)據(jù)恢復(fù)環(huán)境: linux操作系統(tǒng)服務(wù)器中有一組由4塊SAS接口硬盤(pán)組建的raid5陣列。 服務(wù)器故障: 服務(wù)器工作過(guò)程中突
    的頭像 發(fā)表于 05-20 15:46 ?889次閱讀

    服務(wù)器數(shù)據(jù)恢復(fù)—服務(wù)器重裝系統(tǒng)導(dǎo)致分區(qū)消失的數(shù)據(jù)恢復(fù)案例

    服務(wù)器上有一組由raid卡組建的raid5磁盤(pán)陣列。上層安裝linux才做系統(tǒng),采用XFS文件系統(tǒng),劃分了3個(gè)分區(qū)。 管理員將服務(wù)器的操作系統(tǒng)重裝后,發(fā)現(xiàn)
    的頭像 發(fā)表于 05-14 10:13 ?635次閱讀
    <b class='flag-5'>服務(wù)器</b>數(shù)據(jù)恢復(fù)—<b class='flag-5'>服務(wù)器</b>重裝系統(tǒng)導(dǎo)致分區(qū)消失的數(shù)據(jù)恢復(fù)案例

    基于RV1126開(kāi)發(fā)板限制系統(tǒng)日志大小教程

    無(wú)論管理什么系統(tǒng),對(duì)日志文件的監(jiān)控、調(diào)用、管理都是其中重要的一部分。服務(wù)器問(wèn)題的解決都是從查看系統(tǒng)(錯(cuò)誤)日志開(kāi)始的。系統(tǒng)日志是記錄系統(tǒng)硬件
    的頭像 發(fā)表于 04-16 11:18 ?758次閱讀
    基于RV1126開(kāi)發(fā)板限制系統(tǒng)<b class='flag-5'>日志</b>大小教程