【问题标题】:Multiples Commands To CMD多个命令到 CMD
【发布时间】:2021-11-09 21:07:27
【问题描述】:

我必须使用以下命令行工具:ncftp, 之后我需要 执行以下命令: “打开 ftp //...” “获取 -R 文件夹”,但我需要自动执行此操作。如何使用 Python 或命令行实现这一目标

【问题讨论】:

    标签: python command-line ftp


    【解决方案1】:

    您可以为此使用 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 是否更适合您要完成的任务。
    • 不知道怎么用。我需要获取一些文件,删除这些文件,然后上传一些新文件
    猜你喜欢
    • 1970-01-01
    • 2017-12-08
    • 1970-01-01
    • 2013-11-24
    • 2012-05-22
    • 1970-01-01
    • 2013-06-08
    • 2010-09-16
    • 1970-01-01
    相关资源
    最近更新 更多