Check whether a path exists on a remote host using paramiko
23,487
Solution 1
See the errno
module for constants defining all those error codes. Also, it's a bit clearer to use the errno
attribute of the exception than the expansion of the __init__
args, so I'd do this:
except IOError, e: # or "as" if you're using Python 3.0
if e.errno == errno.ENOENT:
...
Solution 2
Paramiko literally raises FileNotFoundError
def sftp_exists(sftp, path):
try:
sftp.stat(path)
return True
except FileNotFoundError:
return False
Solution 3
There is no "exists" method defined for SFTP (not just paramiko), so your method is fine.
I think checking the errno is a little cleaner:
def rexists(sftp, path):
"""os.path.exists for paramiko's SCP object
"""
try:
sftp.stat(path)
except IOError, e:
if e[0] == 2:
return False
raise
else:
return True
Author by
Sridhar Ratnakumar
Updated on July 09, 2022Comments
-
Sridhar Ratnakumar almost 2 years
Paramiko's SFTPClient apparently does not have an
exists
method. This is my current implementation:def rexists(sftp, path): """os.path.exists for paramiko's SCP object """ try: sftp.stat(path) except IOError, e: if 'No such file' in str(e): return False raise else: return True
Is there a better way to do this? Checking for substring in Exception messages is pretty ugly and can be unreliable.