运行 commands/removing 个文件夹通过 paramiko

running commands/removing folders through paramiko

我无法 运行 某些命令。例如,rm 或 rmdir。

我试图通过 paramiko 删除一个文件夹,我得到了 "Command not found"。但是 "ls -l" 命令工作正常。 bash 脚本也可以正常工作。

key = paramiko.RSAKey.from_private_key_file(RSA_KEY)

with paramiko.SSHClient() as client:
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client.connect(pkey=key, **SERVER_CONN)

    command = "rm /home/request_files/temp/*"

    in_, out_, err_ = client.exec_command(command=command)
    for i in out_:
        print(i)

"Command not found"

key = paramiko.RSAKey.from_private_key_file(RSA_KEY)

with paramiko.SSHClient() as client:
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client.connect(pkey=key, **SERVER_CONN)

    command = "ls"

    in_, out_, err_ = client.exec_command(command=command)
    for i in out_:
        print(i)

目录 1

目录 2

dir3

等等

我还有一个 bash 脚本,可以正常工作:

sftp -P ${SERVER_PORT} ${SERVER_USERNAME}@${SERVER_HOST} <<EOF
    rm ${dir1}/*
    rmdir ${dir1}
EOF

感谢@martyn,我找到了解决这个问题的方法

def open_sftp(files_folder_name):
    key = paramiko.RSAKey.from_private_key_file(RSA_KEY)

    with paramiko.SSHClient() as client:
        client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        client.connect(pkey=key, **SERVER_CONN)
        with client.open_sftp() as sftp:
            files = sftp.listdir(path=files_folder_name)
            for f in files:
                sftp.remove(f"{files_folder_name}/{f}")
            sftp.rmdir(files_folder_name)