You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

97 lines
3.8 KiB

import os
import shutil
import paramiko
import argparse
import Contant
from LoggerUtils import Logger, initLogger
import configparser
import requests
import time
# python3 sftp.py --local="/mnt/tmp_srt_file" --logDir="./logs"
# python3 sftp.py --local="/mnt/test_file" --logDir="./logs"
if __name__ == "__main__":
# 读取参数
parser = argparse.ArgumentParser(description="")
parser.add_argument("--local", type=str, default="")
parser.add_argument('--logDir', type=str, default='')
args = parser.parse_args()
Contant.logDir = args.logDir
initLogger()
# 读取配置文件
config = configparser.ConfigParser()
config.read('sftp_config.ini')
# 获取SFTP配置信息
hostname = config.get('sftp_config', 'hostname')
port = config.getint('sftp_config', 'port')
username = config.get('sftp_config', 'username')
password = config.get('sftp_config', 'password')
Logger.info("host:{},port:{},username:{},password:{}".format(
hostname, port, username, password))
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
sftp_client = None # 设置默认值
ssh_client.connect(hostname, port, username, password)
# 创建SFTP客户端
sftp_client = ssh_client.open_sftp()
Logger.info("SFTP客户端已经建立:{}".format(sftp_client))
remote_root = "/Inbound/YouTube Captions"
local_root = args.local
Logger.info("remote_root:{},local_root:{}".format(remote_root, local_root))
names = os.listdir(local_root)
for name in names:
# sftp创建文件夹
try:
sftp_client.chdir(remote_root + "/" + name)
except BaseException:
sftp_client.mkdir(remote_root + "/" + name)
sftp_client.chdir(remote_root + "/" + name)
# 遍历本地临时文件夹
srtList = os.listdir(local_root + "/" + name)
for srt in srtList:
# 获取远程文件路径以及本地文件路径
remotePath = remote_root + "/" + name + "/" + srt
localPath = local_root + "/" + name + "/" + srt
# 如果远程文件存在,则进行删除
try:
sftp_client.stat(remotePath)
# 如果文件存在,删除它
sftp_client.remove(remotePath)
Logger.info("Remote file '{}' deleted.".format(remotePath))
except FileNotFoundError:
Logger.info("Remote file '{}' not found.".format(remotePath))
# 上传本地文件
try:
# 判断远程地址长度,过长需要截取一部分
if len(remotePath) > 120:
remotePath = remotePath[:-20] + ".srt"
# 判断本地文件是否存在,存在则上传
if os.path.exists(localPath):
Logger.info("本地文件 '{}' 存在,开始上传.".format(localPath))
sftp_client.put(localPath, remotePath, confirm=False)
os.remove(localPath)
else:
Logger.info("本地文件 '{}' 不存在,无法上传.".format(localPath))
except Exception as e:
Logger.info("上传失败 '{}' 文件名长度{}".format(
remotePath, len(remotePath)))
Logger.error(e)
sftp_client.close()
sftp_client = ssh_client.open_sftp()
# 发送钉钉消息
webhook = "https://oapi.dingtalk.com/robot/send?access_token=c8c8d7d42c4eecd449dd303025ef968f647d1d8e8694e3fabc0ab5770d646dcb"
jsonData = {
"msgtype": "text",
"text": {
"content": "[Youtube]sftp finished"
}
}
requests.post(webhook, json=jsonData)
Logger.info("sftp发送钉钉消息成功...")