2009-05-12 6 views
12

Paramiko의 SFTPClient에는 분명히 exists 메소드가 없습니다. 이것은 현재 구현 한 것입니다 :paramiko를 사용하여 원격 호스트에 경로가 있는지 확인하십시오.

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 

더 좋은 방법이 있습니까? 예외 메시지에서 하위 문자열을 검사하는 것은 꽤 못 생기고 신뢰할 수 없습니다.

답변

18

이 모든 오류 코드를 정의하는 상수에 대한 errno module를 참조하십시오

은 내가 errno를 확인하는 것은 조금 청소기라고 생각합니다. 또한,이 __init__ 인수의 확장보다는 예외의 errno 속성을 사용하는 것이 조금 더 명확한, 그래서 나는이 작업을 수행 할 것 :

except IOError, e: # or "as" if you're using Python 3.0 
    if e.errno == errno.ENOENT: 
    ... 
+0

이 아마 비에 합계 때문에() 할 수있는 올바른 방법이다 Paramiko를 통해 SFTP 서버에있는 기존 파일은 errno.ENOENT 오류 코드로이 예외를 발생시킵니다. https://github.com/paramiko/paramiko/blob/master/paramiko/sftp_client.py#L722 – Devy

7

SFTP (paramiko뿐 아니라)에 대해 정의 된 "exists"메소드가 없으므로 메소드가 정상입니다.

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 
관련 문제