如何检查使用 Paramiko exec_command 创建的文件是否存在

How to check if the created file using Paramiko exec_command exists

我正在尝试打开一个作为 Paramiko exec_command 的一部分创建的文件。文件已创建,但当我检查文件是否存在时,它总是 returns false。如何检查文件是否存在,然后打开文件进行读取?

写的代码是:

ip = '10.30.2.104'
username = 'root'
password = 'docker'
def checkSSH(ip, username, password, retries=1):
    ssh = SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.load_system_host_keys()
    for x in range(retries):
        try:
            ssh.connect(ip, username=username, password=password, timeout=10)
            return ssh
        except (
        paramiko.BadHostKeyException, paramiko.AuthenticationException, paramiko.SSHException, socket.error) as e:
            print('Exception occured.. {0}'.format(e))
            return False

hdl = checkSSH(ip, username, password)
cmd = 'ls > test.log'
hdl.exec_command(cmd)
a = os.path.exists('/root/test.log')
print(a) >>> if the file exists, this returns true as per the documentation but in this case, it always returns false.

首先,您不是在等待命令完成。

请参阅:
Wait to finish command executed with Python Paramiko

命令完成后,您可以使用 Channel.recv_exit_status():
检索其退出代码 How can you get the SSH return code using Paramiko?

如果它 returns 0,您就知道一切正常,不需要额外检查。


无论如何,如果要检查,请使用 SFTP (SFTPClient.stat):

sftp = hdl.open_sftp()
try:
    sftp.stat('/root/test.log')
    print("exists")
except Exception as e:
    print("something is wrong: " + e)

尽管ls命令的执行对我来说似乎很奇怪。

如果要检索目录列表,请使用 SFTP:SFTPClient.listdir_attr