借用python 学习 VM的 FTP(VisionMaster4.3)
无懒不python:看官方V社区有介绍: 需要安装 Quick Easy FTP Server V4.0.0.exe
为了表示敬意再次放出链接:
V社区-机器智能技术交流-VM关于FTP存图的一点分享
好了VM先放一边 先用python自收 自发: 毕竟这个免费
FTP服务端: 0.ftpserver.py
需要安装的库 和 注意事项已经在注视里面说明;
#pip install pyftpdlib
from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer
r"""
运行之前需要安装好
#pip install pyftpdlib
win10 复制的的路径是这样的
C:\Users\Administrator\Desktop\FTP
路径这么写也没问题
"C:/Users/Administrator/Desktop/FTP/path/to/ftp"
"C:\\Users\\Administrator\\Desktop\\FTP\\path\\to\\ftp"
个人倾向于这种 因为复制过来就这样
r"C:\Users\Administrator\Desktop\FTP"
路径格式:Windows系统,路径需要用双反斜杠 \\ 或者原始字符串 r"C:\FTP"。
权限问题:确保你的Python脚本有权限访问和写入指定的目录。
端口21的权限:默认FTP端口是21,但这个端口需要管理员权限才能监听。你可以选择使用其他端口(如2121),或者以管理员身份运行脚本。
用户名、密码、目录
user", "password" "C:/Users/Administrator/Desktop/FTP/path/to/ftp"
"""
def main():
# 创建一个授权器,用于管理用户和权限
authorizer = DummyAuthorizer()
# 添加一个用户(用户名、密码、目录、权限)
# 权限说明:
# elr = 更改目录、列出文件、读取文件
# m = 修改文件(上传、删除、重命名等)
authorizer.add_user("user", "password", "C:/Users/Administrator/Desktop/FTP/path/to/ftp", perm="elrmw")
# 添加匿名用户(可选)
#authorizer.add_anonymous("/path/to/anonymous")
# 创建FTP处理器
handler = FTPHandler
handler.authorizer = authorizer
# 设置服务器地址和端口
server = FTPServer(("0.0.0.0", 21), handler)
# 启动FTP服务器
server.serve_forever()
if __name__ == "__main__":
main()
双击运行它 只要不报错 那么它的效果 和Quick Easy FTP Server V4.0.0.exe 是一样的
好了
接下来继续做 1.ftpupup.py [用于上传图ha片] 且同级目录有一张用于测试的图片
上传不需要安装外部库 标准python3.8 自带的:
#ftplib 不需要安装
# authorizer.add_user("user", "password", "C:/Users/Administrator/Desktop/FTP/path/to/ftp", perm="elrmw")
from ftplib import FTP
def upload_file_to_ftp(ftp_server, username, password, local_file_path, remote_file_path):
"""
上传文件到FTP服务器
:param ftp_server: FTP服务器地址
:param username: 用户名
:param password: 密码
:param local_file_path: 本地文件路径
:param remote_file_path: 远程文件路径
"""
try:
# 创建FTP连接
ftp = FTP(ftp_server)
ftp.login(username, password)
print(f"成功连接到FTP服务器: {ftp_server}")
# 打开本地文件
with open(local_file_path, 'rb') as file:
# 使用STOR命令上传文件
ftp.storbinary(f'STOR {remote_file_path}', file)
print(f"文件上传成功: {remote_file_path}")
except Exception as e:
print(f"上传文件时发生错误: {e}")
finally:
# 关闭FTP连接
ftp.quit()
print("FTP连接已关闭")
import os
import time
Plk=os.getcwd()
# 示例用法
ftp_server = "127.0.0.1" # 替换为你的FTP服务器地址
username = "user" # 替换为你的FTP用户名
password = "password" # 替换为你的FTP密码
local_file_path = fr"{Plk}/2025-01-21_02_29_24.png" # 替换为本地图片文件路径
while True:
SaveFileName=time.strftime('%Y-%m-%d_%H_%M_%S');
remote_file_path = fr"/{SaveFileName}_ftp.png" # 替换为FTP服务器上的目标路径
upload_file_to_ftp(ftp_server, username, password, local_file_path, remote_file_path)
time.sleep(2)# 2秒钟 更新一次
#
先运行服务端在运行客户端 可以看到 服务端回显 和 客户端的输出
现在一切正常 打开VM: 拖一个 图像源 脚本 输出图像
图像源设置图像 脚本 输出一个字符串
out0 = DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss");
主要是为了获取当前时间用于保存文件名;
接下来输出图像模块:
输入源肯定是 图像源1.图像
存图使能打开; 保存原图打开;
原图路径设置好
[一定要设置原图路径][当打开启用FTP 时原图路径会作为]
借用V社区的话 原图路径:表示 VM 存图在本地哪个文件夹内,本例是在桌面新建了一个名为“中转站”的文件夹。这也说明了 VM 是先将图片存在本地,然后上载至服务端的逻辑过程。
[如果你的电脑足够慢 你可以清楚的看到 原图路径 在上传ftp的时候出现一张图 又消失]
原图命名 继承自 脚本1.out0[] 也就是上面脚本生成的时间字符串
启用FTP 打开
服务器IP 127.0.0.1
服务器端口:21
用户名:user
密码:password
编码格式:UINCODE
FTP路径:\ [一个反斜杠就是根目录 ][反斜杠后面加字符就会创建文件夹]
连接:打开 [ 网络正常 服务器正常 IP 端口 用户名 密码 编码格式 FTP路径 设置好才能打开]
输出使能:打开
像素格式:RGB24
最后吐槽一下 VM 模块参数 界面做的:
界面尺寸又小 ;选项又多,还不能缩放界面尺寸[左右不能改变尺寸算了上下也不能改变],更多选项只能通过 滚轮 或者滑动条 才能看到设置项
单个模块 一张截图又截不完整 得分好几张图截取 大大的不方便学习;
上截图吧.
py的ftp服务端要运行: VM端点击执行 发现图已经传过去了 效果和1.ftpupup.py 是一样的
最后远程 喊话VM研发 就不能把模块做成这样吗 窗口尺寸可以改变 上下 左右能拖动改变窗口大小 一眼看完所有参数的.??????????? !!!!!
最后 发现VM 运行FTP传图没有python快 猜测是因为负载原因;
但是VM FTP传图厉害的一点是 不管服务器在不在线 存图模块它都可以正常运行不报错 不红 一旦服务器在线 会自动将 没在线运行的图自动传过去.
此致 敬礼;