import sys
import json
from ftplib import FTP, all_errors
from datetime import datetime
def list_files_with_size(ftp):
file_list = []
filenameList = []
try:
filepath = ftp.pwd()
use_mlsd = False
try:
entries = list(ftp.mlsd())
use_mlsd = True
except:
entries = ftp.nlst()
if use_mlsd:
for name, facts in entries:
if facts.get('type') == 'file':
try:
size = int(facts.get('size', 0))
modify_raw = facts.get('modify')
modifytime = parse_ftp_modify_time(modify_raw) if modify_raw else ""
filenameList.append(name)
file_list.append({
"source_path": filepath,
"filename": name,
"size": size,
"modification_time": modifytime
})
except:
continue
else:
for name in entries:
try:
size = ftp.size(name)
modify_raw = ftp.sendcmd(f"MDTM {name}")[4:].strip()
modifytime = parse_ftp_modify_time(modify_raw)
filenameList.append(name)
file_list.append({
"source_path": filepath,
"filename": name,
"size": size,
"modification_time": modifytime
})
except:
continue
except Exception as e:
print(f"Get File List Error: {e}")
return {
"filenameList":filenameList,
"file_list":file_list
}
def parse_ftp_modify_time(modify_raw):
try:
dt = datetime.strptime(modify_raw, "%Y%m%d%H%M%S")
return dt.strftime("%Y-%m-%d %H:%M:%S")
except:
return modify_raw
def main():
msg = json.load(sys.argv[2])
ftp_ip = msg["eqp"]["ip"]
ftp_port = msg["eqp"]["port"]
ftp_user = msg["eqp"]["username"]
ftp_pass = msg["eqp"]["password"]
remote_dir = msg["eqp"]["source_path"]
try:
ftp = FTP()
ftp.connect(ftp_ip, ftp_port)
ftp.login(ftp_user, ftp_pass)
ftp.cwd(remote_dir)
result = list_files_with_size(ftp)
file_result = {
"requestData":msg,
"processData":{
"filenameList":result["filenameList"],
"file_list":result["file_list"]
},
"source":msg
}
print(file_result) # json输出
except all_errors as e:
print(f"FTP ERROR: {e}")
finally:
try:
ftp.quit()
except:
pass
if __name__ == '__main__':
main()
去掉def,将代码整合为一体,以print(file_result)结尾
ftp文件传输
于 2025-04-07 09:41:29 首次发布