这是我的函数,使用paramiko将文件从本地机器复制到远程机器,但它不检查目标目录是否存在并继续复制,如果远程路径不存在则不会抛出错误存在
def copyToServer(hostname, username, password, destPath, localPath):
transport = paramiko.Transport((hostname, 22))
transport.connect(username=username, password=password)
sftp = paramiko.SFTPClient.from_transport(transport)
sftp.put(localPath, destPath)
sftp.close()
transport.close()
我想检查远程机器上的路径是否存在,如果没有则抛出错误。
提前致谢
答案 0 :(得分:0)
我会在SFTPClient中使用listdir方法。您可能必须递归使用此方法以确保整个路径有效。
答案 1 :(得分:0)
您可以使用SFTPClient
的chdir()
方法。它会检查远程路径是否存在,否则会引发错误。
try:
sftp.chdir(destPath)
except IOError as e:
raise e
答案 2 :(得分:0)
这样做
def copyToServer(hostname, username, password, destPath, localPath):
transport = paramiko.Transport((hostname, 22))
sftp = paramiko.SFTPClient.from_transport(transport)
try:
sftp.put(localPath, destPath)
sftp.close()
transport.close()
print(" %s SUCCESS " % hostname )
return True
except Exception as e:
try:
filestat=sftp.stat(destPath)
destPathExists = True
except Exception as e:
destPathExists = False
if destPathExists == False:
print(" %s FAILED - copying failed because directory on remote machine doesn't exist" % hostname)
log.write("%s FAILED - copying failed directory at remote machine doesn't exist\r\n" % hostname)
else:
print(" %s FAILED - copying failed" % hostname)
log.write("%s FAILED - copying failed\r\n" % hostname)
return False
答案 3 :(得分:0)
我认为最好避免出现异常,因此,除非您有很多文件夹,否则这是一个不错的选择:
if folder_name not in self.sftp.listdir(path):
sftp.mkdir(os.path.join(path, folder_name))