显示 Python FTP 文件上传消息

Show Python FTP file upload messages

我有一个远程 FTP 服务器,我想在其中上传新的固件映像。当使用 Linux ftp 客户端时,我可以使用 put <somefile> 执行此操作,然后服务器响应状态消息,例如:

ftp> put TS252P005.bin flash
local: TS252P005.bin remote: flash
200 PORT command successful
150 Connecting to port 40929
226-File Transfer Complete. Starting Operation:
Checking file integrity...
Updating firmware...
Result: Success
Rebooting...
421 Service not available, remote server has closed connection
38563840 bytes sent in 6.71 secs (5.4779 MB/s)
ftp>

现在我可以使用 Python 上传文件,也可以使用 ftplib:

fw_path = ....
ip = ....
user = ...
pw = ....
with open(fw_path, "rb") as f:
    with ftplib.FTP(ip) as ftp:
        ftp.login(user=user, passwd=pw)
        ftp.storbinary("stor flash", f)

但是我找不到使用 ftp 实用程序获取状态消息的方法。这对我来说很重要,因为我需要检查更新是否真的成功了。

如何在我的 Python 程序中获得此输出?如果 ftplib 做不到,我也愿意使用不同的库。

感谢任何帮助!

如果您想以编程方式检查响应,请检查 FTP.storbinary 的结果:

print(ftp.storbinary("STOR flash", f))

尽管您的服务器实际上在发送完整响应之前就关闭了连接,FTP.storbinary 会引发异常。

如果您想阅读部分回复,您将必须 re-implement FTP.storbinary 的作用。喜欢

ftp.voidcmd('TYPE I')
with ftp.transfercmd("STOR flash") as conn:
    while 1:
        buf = f.read(8192)
        if not buf:
            break
        conn.sendall(buf)
line = ftp.getline()
print(line)
if line[3:4] == '-':
    code = line[:3]
    while 1:
        nextline = self.getline()
        print(nextline)
        if nextline[:3] == code and nextline[3:4] != '-':
            break

如果您想手动检查响应,请使用 FTP.set_debuglevel 启用日志记录。