文档章节

python3 写的一个通过ftp远程批量处理的工具__界面处理代码

neverGG
 neverGG
发布于 2016/01/27 16:31
字数 617
阅读 120
收藏 6
# -*- coding: utf-8 -*-

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import Qt, QFileDialog, QMessageBox, QStandardItemModel,\
    QModelIndex, QAbstractItemView, QThread, QProgressDialog
from ftpFun import ftpInterface
from ftpXML import ftpXml
import os

class PGThread(QThread):
    _signal = QtCore.pyqtSignal(int)
    pgValue = 0
    def __init__(self, parent = None):
        QThread.__init__(self, parent)
        self._signal.connect(self.parent().setPgValue)
    
    def initTask(self, curInfoL, taskID):
        self.curInfo = curInfoL
        self.taskID = taskID
        '''taskID = 1 upload  taskID = 2 remove  taskID = 3 rename'''
        #self.pgdlg.exec_()
        
    def run(self):
        row = 0
        strInfo = ''
        step = int(100 / len(self.curInfo))
        tmpValue = step
        isContinue = True
        for cur in self.curInfo:
            print(cur)
            if(isContinue):        
                ftpObj = ftpInterface(cur['ip'], 21, 'xxx', 'xxxxx')
                ftpObj.setlocalPath('')
                if(self.taskID == 1):
                    upFilePath = self.parent().folderLineEdit.text()
                    print(upFilePath)
                    ret = ftpObj.ftpUpLoadFile(upFilePath)
                    if(ret == -1):
                        isContinue = False
                        strInfo = "未找到/voicePrompt/1文件夹"
                    elif(ret == -3):
                        isContinue = False
                        strInfo = "请检查输入路径下无文件数据"
                    elif(ret == -2):
                        strInfo = "上传时出现异常"
                    else:
                        strInfo = "文件已上传请检查"
                elif(self.taskID == 2):
                    removePath = self.parent().folderLineEdit.text()
                    ret = ftpObj.ftpRemoveFile(removePath)
                    if(ret == -1):
                        isContinue = False
                        strInfo = "未找到/voicePrompt/1文件夹"
                    elif(ret == -2):
                        strInfo = "删除时出现异常有可能文件不存在"
                    else:
                        strInfo = "文件已删除请检查"
                elif(self.taskID == 3):
                    beforeName = self.parent().beforeLineEdit.text()
                    afterName = self.parent().afterLineEdit.text()
                    tmpName = os.path.basename(afterName)
                    dirName = os.path.dirname(beforeName)
                    aName = dirName + '//' + tmpName
                    ret = ftpObj.ftpRenameFile(beforeName, aName)
                    if(ret == -1):
                        isContinue = False
                        strInfo = "未找到/voicePrompt/1文件夹"
                    elif(ret == -2):
                        strInfo = "修改时出现异常有可能文件不存在"
                    else:
                        strInfo = "文件已修改请检查"
            self.parent().Model.setData(self.parent().Model.index(row, 0, QModelIndex()), cur['name'])
            self.parent().Model.setData(self.parent().Model.index(row, 1, QModelIndex()), strInfo)
            row += 1
            tmpValue += step
            tmpValue += 1
            self._signal.emit(tmpValue)
            print(tmpValue)
        self.parent().logTbView.setModel(self.parent().Model)


class Ui_Ftp(object):
    def setupUi(self, Ftp):        
        self.retranslateUi(Ftp)
        QtCore.QMetaObject.connectSlotsByName(Ftp)
        
        '''设置最小化按钮'''
        self.setWindowFlags(Qt.Widget)
        #self.setWindowFlags(Qt.WindowMaximizeButtonHint)
        self.radioButton.setChecked(True)
        self.ftpPathLineEdit.setText("/voicePrompt/1")
        #self.ftpPathLineEdit.setDisabled(True)
        self.ftpPathLineEdit.setReadOnly(True)
        self.hideRenameElemt(False)
        
        self.ckBoxList = [];
        self.checkBoxSignal()
        
        '''信号和槽'''
        self.allCheckBtn.clicked.connect(self.allCheckBtnClicked)
        self.clearBtn.clicked.connect(self.clearBtnClicked)
        self.isShowArea = False
        self.areaShwoBtn.clicked.connect(self.areaShowBtnClicked)
        self.openBtn.clicked.connect(self.openBtnClicked)
        self.execBtn.clicked.connect(self.execBtnClicked)
        
        
        '''operator'''
        self.radioButton.clicked['bool'].connect(self.upLoadSetting)
        self.radioButton_2.clicked['bool'].connect(self.RemoveFileSetting)
        self.radioButton_3.clicked['bool'].connect(self.RenameFileSetting)
        
        '''ftp ip info'''
        ftpX = ftpXml()
        self.ipInfo = ftpX.getServerInfo()
        
        '''exec log'''
        '''设置qtabview'''
        self.Model = QStandardItemModel()

    def setPgValue(self, value):
        if(value >= 100):
            self.pg.close()
            return
        self.pg.setValue(value)
    
    '''具体执行操作'''
    def execBtnClicked(self):
        ret = self.execLimit()
        if(ret == -1):
            return
        curInfoL = self.getAreaIpInfo()
        if(not curInfoL):
            QMessageBox.warning(self, '错误', '请检查serverinfo.xml是否存在', QMessageBox.Ok)
            return
        
        pt = PGThread(self)
        self.pg = QProgressDialog()
        self.pg.setModal(True)
        self.pg.show()
        
        self.Model.clear()
        self.Model.setRowCount(len(curInfoL))
        self.Model.setColumnCount(2)
        self.Model.setHorizontalHeaderLabels(['地区', '执行情况'])
        self.logTbView.setEditTriggers(QAbstractItemView.NoEditTriggers)
        self.logTbView.update()
        taskId = 0
        pgTitle = ''
        if(self.radioButton.isChecked()):
            taskId = 1
            pgTitle = "正在上传..."
        elif(self.radioButton_2.isChecked()):
            taskId = 2
            pgTitle = "正在上传..."
        elif(self.radioButton_3.isChecked()):
            taskId = 3
            pgTitle = "正在修改..."
        self.pg.setWindowTitle(pgTitle)
        self.pg.setLabelText("请稍后...")
        self.pg.setCancelButton(None)
        self.pg.setWindowFlags(Qt.WindowMinimizeButtonHint)
        pt.initTask(curInfoL, taskId)
        pt.start()
            
            
    def getAreaIpInfo(self):
        areaStr = self.areaLineEdit.text()
        areaList = areaStr.split('、')
        '''find areaIp in self.ipinfo'''
        curInfo = []
        for area in areaList:
            for ftpArea in self.ipInfo:
                if(area == ftpArea['name']):
                    ip = ftpArea['ip']
                    curInfo.append(ftpArea)
                    break
        return curInfo
    
    def execLimit(self):
        if(self.areaLineEdit.text() == ""):
            QMessageBox.information(self, "提示", "请输入地区,多个地区用'、'隔开", QMessageBox.Ok)


© 著作权归作者所有

共有 人打赏支持
neverGG
粉丝 3
博文 12
码字总数 4435
作品 0
技术主管
基于Celery的并行处理工程-OpenWorker快速安装

Celery 是一个简单灵活的Python并行处理框架,但是相关的几个工程需要独自安装和配置,给小白的使用带来困难。 OpenWorker是基于Python的并行处理框架,将集成Celery、Flower、Jobtastic和R...

openthings
2015/08/10
0
4
[雪峰磁针石博客]python3快速入门教程11命令行自动化工具与pexpect

[雪峰磁针石博客]python3快速入门教程 命令行自动化与pexpect 简介 Pexpect 是一个用来启动交互式命令行子程序并对其进行自动控制的 Python 工具模块。 Pexpect 可以用来和像 ssh、ftp、pas...

Python测试开发人工智能
07/25
0
0
国内顶尖白帽子用Python打造渗透工具集,当时花上万购买都被拒!

前言 python是门简单易学的语言,强大的第三方库让我们在编程中事半功倍,今天我们就来谈谈python在渗透测试中的应用,让我们自己动手打造自己的渗透工具集。 一、信息搜集--py端口扫描小脚本...

诸葛青云999
08/18
0
0
Ansible自动化运维工具介绍

介绍 Ansible自动化运维工具,是基于Python开发的,可以实现批量系统配置,批量程序部署、批量运行命令等等。 ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansib...

程小白0302
06/26
0
0
Python 实现 CNKI批量下载 和FireFox Extension 入门学习笔记

Python 实现 CNKI批量下载 和FireFox Extension 入门学习笔记 由于需要也是为了督促自己学习新的东西,我原本想要尝试着写一个爬虫程序,能够在cnki上自动得将论文进行批量下载,学习过程中遇...

猜猜我是吧
2014/09/17
0
2

没有更多内容

加载失败,请刷新页面

加载更多

centos7安装rsync及两台机器进行文件同步

centos7安装rsync及两台机器进行文件同步 2017年12月21日 11:17:46 码农下的天桥 阅读数:2210 标签: centosrsync同步 更多 个人分类: 后端 所属专栏: 研发模式及运维 版权声明:本文为博...

linjin200
31分钟前
2
0
jpg、jpeg、png... 的区别

jpg、jpeg、png... 的区别 对于做设计这一行的人来说,这几个图片格式是最常用的,也是最常见的,几乎每一天都要与他们打交道。 刚刚入门的新人通常不知道在什么地方如何使用他们或者说如何更...

DemonsI
49分钟前
5
0
白话SpringCloud | 第十章:路由网关(Zuul)进阶:过滤器、异常处理

前言 简单介绍了关于Zuul的一些简单使用以及一些路由规则的简单说明。而对于一个统一网关而言,需要处理各种各类的请求,对不同的url进行拦截,或者对调用服务的异常进行二次处理等等。今天,...

oKong
54分钟前
3
0
Character的static方法

基本类型char的包装类是Character,使用的比较多,大家是比较熟悉的。 我只是觉得里面有很多static方法,平时不怎么用,学习一下怎么实现的,或许日后就用到了。 static int compare(char x,...

woshixin
今天
2
0
正则介绍_sed

10月17日任务 9.4/9.5 sed sed工具 匹配打印 -n 只打印匹配行,不然其他行也会打印出来 p 打印(配合-n使用) [root@centos7 tmp]# sed -n '/root/'p passwd root:x:0:0:root:/root:/bin/ba...

robertt15
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部