【问题标题】:Create remote directory using fabric.operations.put()使用 fabric.operations.put() 创建远程目录
【发布时间】:2014-07-25 10:44:57
【问题描述】:

我需要将一些文件放到远程 sftp 服务器上,创建一个新目录来放置它们。有没有办法使用结构来做到这一点? Fabric.operations.put() 看起来无法处理在远程端创建新目录。

【问题讨论】:

    标签: python sftp fabric


    【解决方案1】:

    在调用put()之前运行mkdir

    run('mkdir -p /path/to/dir/')
    
    put('/local/path/to/myfile', '/path/to/dir/')
    

    -p flag 处理创建嵌套目录,请参阅:

    -p,--父母

    如果存在则没有错误,根据需要创建父目录


    更新(仅用于 sftp 访问)。

    使用SFTP.mkdir()

    from contextlib import closing
    from fabric.sftp import SFTP
    
    ftp = SFTP(env.host_string)
    with closing(ftp) as ftp:
        ftp.mkdir('/path/to/dir/', use_sudo=False)
    
    put('/local/path/to/myfile', '/path/to/dir/')
    

    【讨论】:

    • 不,这行不通。我只有 sftp 访问权限。 run() 需要外壳。 $ python try.py [...] run: mkdir -p x [...] out: 此服务器不提供 shell 访问,仅提供 SFTP。再见。
    • @RoySmith 将use_sudo=True 传递给put() 有帮助吗?当然不用打电话给run()
    • 抱歉上面的格式很糟糕;降价完全打败了我(更不用说每次我点击返回时,它都会保存部分编辑的评论)。但是,不,use_sudo=True 没有区别。
    • @RoySmith 在解决方案中添加了closing() 上下文管理器。我实际上已经对其进行了测试,它对我有用。
    • 不行。我得到 Traceback(最近一次调用最后一次):文件“try.py”,第 8 行,在 SFTP(env.host_string).mkdir('x') TypeError: mkdir() 只需要 3 个参数(给定 2 个)我用 help() 戳了一下,看起来这需要一个 use_sudo 参数。尝试 use_sudo=False 得到“IOError:无法创建文件/目录”。使用 use_sudo=True 不会收到任何错误消息,但也不会传输任何文件。
    猜你喜欢
    • 2020-04-10
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多