2011-12-30 4 views
3

원격 FTP 사이트의 디렉토리 목록을 가져 오는 데 문제가 있습니다. This 응답이 작동하지 않습니다 (결과가 나타나지 않고 멈춘 것처럼 보입니다).파이썬에서 FTP 디렉토리를 반복적으로 나열합니다.

여기에 내가 생각할 수있는 가장 간단한 구현 - 그것은 단지 찾은 모든 디렉토리의 전체 경로를 출력한다 : 유일한, 그러나 그것을

1/ 
1-1/ 
    1-2/ 
1-2/ 
1-3/ 
1-4 

:

import ftplib 

def ftp_walk(ftp):  
print 'Path:', ftp.pwd() 
    dirs = ftp.nlst() 
    for item in (path for path in dirs if path not in ('.', '..')): 
     try: 
      ftp.cwd(item) 
      print 'Changed to', ftp.pwd() 
      ftp_walk(ftp) 
      ftp.cwd('..') 
     except Exception, e: 
      print item, e 

ftp = ftplib.FTP('ftp.site.com')           
ftp.login('user', 'pass') 
ftp.cwd('1') 
ftp_walk(ftp) 

내 디렉토리 구조입니다 다음을 출력합니다. 이 작업 디렉토리가 새로운 하위 디렉토리에 한 번 변경 제안하지만, ftp_walk()가 새로운 CWD로 호출 될 때, 그것은 더 이상 이동하지 않습니다

> Path: 1/ 
> Changed to 1-1/ 
+0

어떤 기능이 정지합니까? (코드에서 print 문을 추가하여 어디에서 발생하는지 알 수 있습니다.) – thesamet

+0

또한 코드가 항목을 디렉토리로 간주하기 전에 코드가 확인하지 않습니다. – thesamet

+0

감사합니다. 제 질문을 수정했습니다. – cyrus

답변

0

잘 나는 가정 당신이 로그인하는 사용자 그렇지 않으면 오류를 리턴하고 특정 디렉토리를 나열하지 않기 때문에 모든 구조에 액세스 할 수 있습니다.

예외가 발생하는 경우 여기에 입력하십시오. 어쩌면 try..finally 당신의 cwd해야하므로 길을 잃지 않을 것입니다. 나는 제안 할 수 있습니다 : ftp.login('user', 'pass') 전에 생성자 후

try: 
     ftp.cwd(item) 
     print 'Changed to', ftp.pwd() 
     try: 
      ftp_walk(ftp) 
     finally: 
      ftp.cwd('..') 
    except ftplib.error_perm, e: 
     print item, e 
+0

제안 해 주셔서 감사합니다. 나는 네 변화를 만들었지 만, 여전히 같은 장소에 매달려있다. FTP에서 디렉토리를 약간 변경했는데 서브 디렉토리가없는 디렉토리에만 매달리는 것처럼 보입니다. 그게 무슨 뜻인지는 모르겠다. – cyrus

+0

나는 최근에 그 교수형 문제를 겪었으며 네트워크 권한 (방화벽 등)을 제외하고 무엇이 그 원인인지 파악할 수 없었다. 어쨌든, 수동 모드를 켜기/끄기로 전환하면 문제를 해결할 수 있습니다. –

0

, 당신은 ftp.connect()을 호출해야합니다.

관련 문제