仍与以下问题有关。。。 Parallel downloads with Multiprocessing and PySftp
我想知道如何打印下载的文件?我的意图是在数据库表中添加一条记录,以便创建一个包含文件名、日期和时间的下载文件日志。你知道吗
有什么想法吗?我已经搜索了一些示例并进行了一些测试,但是我的下载模块似乎无法返回任何内容,或者我没有使用正确的代码来读取结果并打印它。你知道吗
下载功能
import pysftp
import os
def fdownload(vfileaux):
vtmpspl = vfileaux.split(',')
vfile = vtmpspl[0]
vhost = vtmpspl[1]
vlogin = vtmpspl[2]
vpwd = vtmpspl[3]
vftppath = vtmpspl[4]
vlocalpath = vtmpspl[5]
os.chdir(vlocalpath)
os.getcwd()
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
vfilecheck = vlocalpath + '/' + vfile
if not os.path.isfile(vfilecheck):
vftpaux = pysftp.Connection(host=vhost, username=vlogin, password=vpwd, cnopts=cnopts)
vftpaux.cwd(vftppath)
vftpaux.get(vfile, preserve_mtime=True)
vftpaux.close()
return vnename + "_" + vdatetime
else:
pass
主要功能
from datetime import *
from ffilelist import *
from ffilefilter import *
from developing.fdownload import *
import pymysql.cursors
from concurrent.futures import ThreadPoolExecutor, wait, as_completed
def main():
print(datetime.datetime.now(), 'Loading variables...')
vhostlist = {}
vloginlist = {}
vpwdlist = {}
vftppathlist = {}
vlocalpathlist = {}
vhostaux = '10.11.12.13'
vhostlist[vhostaux] = vhostaux
vloginlist[vhostaux] = 'admin'
vpwdlist[vhostaux] = 'pass1234'
vftppathlist[vhostaux] = '/export/home'
vlocalpathlist[vhostaux] = 'd:/test/'
vfilelist1 = []
global vfilelist2
vfilelist2 = []
for vhosttmp in vhostlist:
print(datetime.datetime.now(), 'Starting to process ' + vhosttmp + "...")
global vhost
global vlogin
global vpwd
global vftppath
global vlocalpath
vhost = vhostlist[vhosttmp]
vlogin = vloginlist[vhosttmp]
vpwd = vpwdlist[vhosttmp]
vftppath = vftppathlist[vhosttmp]
vlocalpath = vlocalpathlist[vhosttmp]
vfilelist1 = ffilelist(vhost, vlogin, vpwd, vftppath)
print(datetime.datetime.now(), 'Vectorizing download file list...')
for vfile in vfilelist1:
vfilelist2.append(vfile + ',' + vhost + ',' + vlogin + ',' + vpwd + ',' + vftppath + ',' + vlocalpath)
vfilelist0 = ffilefilter(vfilelist2)
print(datetime.datetime.now(), 'Starting simultaneous downloads...')
vpool = concurrent.futures.ProcessPoolExecutor(max_workers=8)
vpool.map(fdownload, vfilelist0)
vpool.shutdown()
print(datetime.datetime.now(), 'Downloads finished!')
要存储在MARIADB中的日志的插入字符串是这样的。已经测试和工作。用在主函数中,我一找到解决方案就可以得到下载文件的列表。你知道吗
vconn = pymysql.connect(host='localhost', user='root', password='pass1234', db='test')
vcurs = vconn.cursor()
vsql = "INSERT INTO `logs_download` (`ne`, `datetime`) VALUES (\'" + vnename + "\', \'" + vdatetime + "\')"
vcurs.execute(vsql)
vconn.commit()
我试过亚历克斯的建议。。。所以我修改了部分代码:
…但得到了以下结果:
相关问题 更多 >
编程相关推荐