文档章节

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

neverGG
 neverGG
发布于 2016/01/27 16:31
字数 617
阅读 116
收藏 6
点赞 1
评论 0
# -*- 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
Ansible自动化运维工具介绍

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

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

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

猜猜我是吧
2014/09/17
0
2
基于Visual C++2010 混合Python编程以及Python简介

我们重点讲解如何在基于Visual C++2010 开发Python的调用,先介绍下Python, Python 具有脚本语言中最丰富和强大的类库,足以支持绝大多数日常应用。它的名字来源于一个喜剧,也许最初设计Pyt...

junwong
2012/03/09
0
0
6个最高效的语言处理Python库,你用过几个?

最近一段时间Python已经成为数据科学行业中大火的编程语言,今天技术学派收集了一些较为高效的语言处理Python库。下面分享给大家。 1.NLTK NLTK是构建Python程序以处理人类语言数据的领先平台...

Python燕大侠
06/05
0
0
用boost python加快vc程序开发

开源项目官方地址: http://www.xiaoniuhui.com/ 原文链接: http://xiaoniuhui.com/#!/用boost-python加快vc程序开发 目录 用标准c接口嵌入python 用boost python嵌入python 用python来实现业...

编码的风景
2013/08/27
0
0
一键将 Python2 代码自动转化为 Python3

问题 Python2 的代码直接在 Python3 环境运行的话会报错误: 如果大量的代码,无论是批量替换,还是逐行修改都够累的,这活儿表示不能干! 有没有办法一键转换呢? 百度了一下发现网上的方法...

xjtuhit
07/04
0
0
基于Celery的并行处理工程-OpenWorker

OpenWorker-初始建立(2015-05-29),欢迎参与:https://github.com/supergis/OpenWorker。 OpenWorker-基于Python的并行处理框架,将集成Celery、Flower、Jobtastic和Rodeo工程,可以通过...

openthings
2015/05/29
0
1
python - paramiko的安装与使用

一:简介 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。 由于使用的是python这样的能够跨平台运行的语言,所以所有python支持的平台,...

北方攻城师
2014/10/11
0
0
Python未来有哪几个最具有潜力发展方向?

近些年来,Python语言的热度越来越高,因为Python简单,学起来快,是不少新手程序员入门的首选语言。 Python是一门脚本语言,因为Python编程语言能将其他各种编程语言写的模块粘接在一起,所...

Python燕大侠
06/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

设计神器 - 摹客设计系统上线了 | 晒出你的设计规范,赢iPad Pro!

在国内,设计规范也许还是个不太常用的概念,但是如果你正好有参与互联网公司的产品设计,你应该早就已经体会到设计规范的重要性了。UI设计师总是要花费大量的时间和精力向开发描述一大堆设计...

mo311
11分钟前
0
0
Thymeleaf 使用过程中的一些记录

Thymeleaf格式化时间: th:value="${#dates.format(gw.regDT,'yyyy-MM-ddHH:mm:ss')}" Thymeleaf select反选: <select id="status" name="status" th:field="${gw.status}" th:value="${gw.......

惊尘大人
14分钟前
0
0
istio源码分析之pilot-discovery模块分析

本文分析的istio代码版本为0.8.0,commit为0cd8d67,commit时间为2018年6月18日。 本文为Service Mesh深度学习系列之一: Service Mesh深度学习系列part1—istio源码分析之pilot-agent模块分...

xiaomin0322
19分钟前
0
0
数据库基本操作:增删改查及联表操作

所用软件:SQL Server Management Studio 首先第一步,建立一个表。在这里命名为T1。并在里面填入几条数据。如图: T1 一.查询 查询所有:select * from T1; 按条件查询:select * from T1 ...

小_橙_子
23分钟前
0
0
Crontab作业时间设置

今天,遇到这么一个题目,周一到周五的9:00-16:59之间,每隔两分钟将某个命令运行一次。给的答案是: */2 9-16 * * 1-5 /usr/sbin/somecommand dosomething 乍一看,这个答案不对,应...

大别阿郎
28分钟前
0
0
ES17-JAVA API文档管理

1.保存文档 可以通过json工具把java对象转换成json字符串进行保存,也可以通过内置的帮助类直接构建json格式 /** * 获取客户端 * * @return */public static TransportClie...

贾峰uk
29分钟前
0
0
Python代码规范和命名规范

前言 Python 学习之旅,先来看看 Python 的代码规范,让自己先有个意识,而且在往后的学习中慢慢养成习惯 一、简明概述 1、编码 如无特殊情况, 文件一律使用 UTF-8 编码 如无特殊情况, 文件头...

blackfoxya
31分钟前
0
0
联动滑动之一:NestScrollChild和NestedScrollingParent

NestScrollChild和NestedScrollingParent 吐槽一下开源中国竟然标题字数有限制 由于项目中使用了CoordinateLayout来解决联动以及实现炫酷的UI效果,那么必须就要研究一波源码了,毕竟知其然知...

JerryLin123
49分钟前
1
0
cloudera spark2.2 读写hbase

cloudera spark2.2 读写hbase 例子 host = 'bigdata-03,bigdata-05,bigdata-04'conf = { "hbase.zookeeper.quorum": host, "hbase.mapreduce.inputtable": "student1"}k......

osenlin
53分钟前
0
0
数据库规范化

转载自 一个小时学会MySQL数据库 地址:http://www.cnblogs.com/best/p/6517755.html 截取其中 1.4 部分 用于自己学习使用 感谢作者:张果 1.4、数据库规范化 经过一系列的步骤,我们现在终于...

十万猛虎下画山
54分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部