【发布时间】:2021-11-09 21:07:27
【问题描述】:
我必须使用以下命令行工具:ncftp, 之后我需要 执行以下命令: “打开 ftp //...” “获取 -R 文件夹”,但我需要自动执行此操作。如何使用 Python 或命令行实现这一目标
【问题讨论】:
标签: python command-line ftp
我必须使用以下命令行工具:ncftp, 之后我需要 执行以下命令: “打开 ftp //...” “获取 -R 文件夹”,但我需要自动执行此操作。如何使用 Python 或命令行实现这一目标
【问题讨论】:
标签: python command-line ftp
您可以为此使用 Python subprocess 模块。
from subprocess import Popen, PIPE
# if you don't want your script to print the output of the ncftp
# commands, use Popen(['ncftp'], stdin=PIPE, stdout=PIPE)
with Popen(['ncftp'], stdin=PIPE) as proc:
proc.stdin.write(b"open ...\n") # must terminate each command with \n
proc.stdin.write(b"get -R Folder\n")
# ...etc
请参阅the documentation for subprocess 了解更多信息。掌握这个库可能有点棘手,但它非常通用。
或者,您可以使用 NcFTP 包中的非交互式命令 ncftpget (docs) 和 ncftpput (docs)。
我建议在继续之前阅读有关这些命令的文档。
在 cmets 中,您说您需要获取一些文件,删除这些文件,然后上传一些新文件。您可以这样做:
$ ncftpget -R -DD -u username -p password ftp://server path/to/local/directory path/to/remote/directory/Folder
$ ncftpput -R -u username -p password ftp://server path/to/remote/directory path/to/local/directory/Folder
-DD 将在下载后删除所有文件,但会保留目录和所有子目录
如果需要删除空文件夹,可以在没有-R的情况下再次运行ncftpget命令(但文件夹必须完全为空,即没有子目录,所以冲洗并根据需要重复)。
您可以在 bash 脚本中执行此操作,或在 Python 中使用 subprocess.run。
【讨论】:
ncftp shell 将在with 块结束后立即关闭。如果您想在不使用with 块的情况下保持打开状态,您可以执行proc = Popen(['ncftp'], stdin=PIPE),然后在完成后使用proc.stdin.close()(如果您正在捕获标准输出,则使用proc.stdout.close())关闭它,然后使用@987654341 @.
ncftpget 是否更适合您要完成的任务。