You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Python在远程主机上执行目录移动操作?

用Python实现远程主机目录移动的两种方案

嗨,这个需求很常见,我来给你分享两种靠谱的实现方式,都是Python里处理远程SSH操作的主流方案:

方法一:使用Paramiko(底层SSH操作库)

Paramiko是Python生态里最常用的底层SSH库,能直接和远程主机建立SSH连接并执行命令,灵活性很高。

步骤1:安装Paramiko

首先得装这个库,在终端里执行:

pip install paramiko

步骤2:编写Python脚本

下面是完整的代码示例,包含连接、执行命令和错误处理:

import paramiko

def move_remote_directory(hostname, username, password, src_path, dest_path):
    # 创建SSH客户端实例
    ssh = paramiko.SSHClient()
    try:
        # 自动添加远程主机的SSH密钥(首次连接时不会弹出确认提示)
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        # 连接远程主机
        ssh.connect(hostname, username=username, password=password)
        
        # 构建mv命令(注意:多数Unix系统中移动目录不需要-r,直接mv即可)
        command = f"mv {src_path} {dest_path}"
        # 执行命令,获取标准输出、标准错误和返回码
        stdin, stdout, stderr = ssh.exec_command(command)
        
        # 读取输出和错误信息
        output = stdout.read().decode('utf-8')
        error = stderr.read().decode('utf-8')
        
        if output:
            print(f"命令执行输出:{output}")
        if error:
            print(f"命令执行错误:{error}")
        
        # 检查命令是否执行成功
        if stdout.channel.recv_exit_status() == 0:
            print("目录移动成功!")
        else:
            print("目录移动失败,请检查路径或权限。")
    except Exception as e:
        print(f"连接或执行命令出错:{str(e)}")
    finally:
        # 确保关闭SSH连接
        ssh.close()

# 调用示例
if __name__ == "__main__":
    move_remote_directory(
        hostname="你的远程主机IP",
        username="你的用户名",
        password="你的密码",
        src_path="/path/to/source/dir",
        dest_path="/path/to/destination/dir"
    )

方法二:使用Fabric(更简洁的运维自动化库)

Fabric是基于Paramiko封装的高阶库,语法更简洁,专门用于编写运维自动化脚本,适合快速实现远程命令执行、文件传输等操作。

步骤1:安装Fabric

注意Fabric现在有v2版本,安装命令:

pip install fabric

步骤2:编写Python脚本

Fabric的代码会更简洁,示例如下:

from fabric import Connection

def move_remote_directory(hostname, username, password, src_path, dest_path):
    # 创建连接对象
    conn = Connection(
        host=hostname,
        user=username,
        connect_kwargs={"password": password}
    )
    
    try:
        # 执行mv命令,Fabric会自动处理连接和输出
        result = conn.run(f"mv {src_path} {dest_path}", hide=True)
        
        if result.ok:
            print("目录移动成功!")
        else:
            print(f"目录移动失败:{result.stderr}")
    except Exception as e:
        print(f"执行出错:{str(e)}")
    finally:
        conn.close()

# 调用示例
if __name__ == "__main__":
    move_remote_directory(
        hostname="你的远程主机IP",
        username="你的用户名",
        password="你的密码",
        src_path="/path/to/source/dir",
        dest_path="/path/to/destination/dir"
    )

额外提醒

  • 关于mv命令的参数:大多数Unix-like系统中,移动目录不需要-r参数,直接mv src dest即可;如果你的场景需要处理特殊的递归情况(比如某些特殊文件系统),可以把命令改成mv -r {src_path} {dest_path}。
  • 安全建议:如果可以的话,尽量使用SSH密钥认证代替密码认证,这样更安全。两种库都支持密钥认证,比如Paramiko可以用key_filename参数指定密钥路径,Fabric的connect_kwargs里可以传key_filename。

内容的提问来源于stack exchange,提问作者Darth.Vader

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:25:44